From 79b04f1ab5079d65e84e6a8006255a9c2cf9944e Mon Sep 17 00:00:00 2001 From: stefanstokic-oai Date: Mon, 31 Aug 2026 00:02:43 +0000 Subject: [PATCH] Show actionable rate-limit banners in the TUI (#41742) ## What changed - Carry optional backend-owned banner and account identity data through `account/rateLimits/read`, filtering banners that do not match the authenticated account and user. - Render supported rate-limit notices above the composer with actions for usage, credits, resets, owner notifications, and plan management while preserving the existing fallback UI for absent or unsupported banners. - Refresh usage after limit errors, reject stale responses, and keep queued input paused until recovery completes. When instructed by the banner, switch to the first available fallback model without changing unrelated thread settings. ## Testing - Add protocol, banner parsing and rendering, CTA, identity filtering, refresh ordering, fallback-model, account-change, and queued-input recovery coverage. GitOrigin-RevId: e03d75a82e425deb87f4b120a71cf2286c0ef6cc --- .../codex_app_server_protocol.schemas.json | 10 + .../codex_app_server_protocol.v2.schemas.json | 10 + .../json/v2/GetAccountRateLimitsResponse.json | 10 + .../app-server-exports-experimental.json.zst | Bin 148284 -> 148396 bytes .../app-server-exports-stable.json.zst | Bin 143884 -> 144031 bytes .../v2/GetAccountRateLimitsResponse.ts | 12 +- .../src/protocol/v2/account.rs | 5 + codex-rs/app-server/README.md | 4 +- .../request_processors/account_processor.rs | 12 + .../app-server/tests/common/auth_fixtures.rs | 4 + .../app-server/tests/suite/v2/rate_limits.rs | 93 ++++ .../src/client/rate_limit_resets.rs | 3 + codex-rs/backend-client/src/types.rs | 7 + codex-rs/tui/src/app.rs | 3 + codex-rs/tui/src/app/app_server_events.rs | 15 +- .../tui/src/app/backend_banner_fallback.rs | 64 +++ codex-rs/tui/src/app/background_requests.rs | 27 +- codex-rs/tui/src/app/event_dispatch.rs | 56 +- codex-rs/tui/src/app/rate_limit_refresh.rs | 96 ++++ codex-rs/tui/src/app/session_lifecycle.rs | 8 + codex-rs/tui/src/app/startup.rs | 1 + codex-rs/tui/src/app/test_support.rs | 1 + codex-rs/tui/src/app/tests.rs | 8 + .../tests/backend_banner_fallback_tests.rs | 427 +++++++++++++++ .../tests/backend_banner_recovery_tests.rs | 488 ++++++++++++++++++ .../app/tests/backend_banner_startup_tests.rs | 94 ++++ codex-rs/tui/src/app/tests/rate_limits.rs | 159 ++++++ ..._tests__backend_banner_after_fallback.snap | 15 + ...tests__backend_banner_fallback_notice.snap | 6 + ...__backend_banner_fallback_unavailable.snap | 8 + codex-rs/tui/src/app_event.rs | 4 + codex-rs/tui/src/app_server_session.rs | 2 + codex-rs/tui/src/backend_banners.rs | 74 +++ codex-rs/tui/src/backend_banners/actions.rs | 87 ++++ codex-rs/tui/src/backend_banners/render.rs | 74 +++ codex-rs/tui/src/backend_banners_tests.rs | 57 ++ .../tui/src/bottom_pane/actionable_banner.rs | 259 ++++++++++ .../src/bottom_pane/list_selection_view.rs | 12 +- codex-rs/tui/src/bottom_pane/mod.rs | 117 ++++- .../src/bottom_pane/selection_popup_common.rs | 45 +- ..._tests__backend_banner_personal_limit.snap | 18 + ...ckend_banner_workspace_member_credits.snap | 18 + ...__inline_banner_wrapped_and_truncated.snap | 22 + .../tests/actionable_banner_tests.rs | 170 ++++++ ...tests__information_banner_dismissible.snap | 15 + ..._tests__information_banner_persistent.snap | 13 + codex-rs/tui/src/chatwidget.rs | 5 +- .../tui/src/chatwidget/backend_banners.rs | 180 +++++++ codex-rs/tui/src/chatwidget/constructor.rs | 2 + codex-rs/tui/src/chatwidget/input_flow.rs | 5 +- codex-rs/tui/src/chatwidget/input_queue.rs | 3 + codex-rs/tui/src/chatwidget/input_restore.rs | 3 +- .../tui/src/chatwidget/input_submission.rs | 11 + codex-rs/tui/src/chatwidget/interaction.rs | 1 + codex-rs/tui/src/chatwidget/rate_limits.rs | 68 ++- codex-rs/tui/src/chatwidget/session_flow.rs | 1 + codex-rs/tui/src/chatwidget/settings.rs | 4 + codex-rs/tui/src/chatwidget/tests.rs | 4 + .../chatwidget/tests/backend_banners_tests.rs | 419 +++++++++++++++ codex-rs/tui/src/chatwidget/tests/helpers.rs | 2 +- .../tests/rate_limit_recovery_tests.rs | 65 +++ ...ackend_banner_information_dismissible.snap | 14 + ...ests__backend_banner_information_only.snap | 12 + ...rs_tests__backend_banner_notification.snap | 15 + ...ner_notification_after_account_change.snap | 5 + .../src/chatwidget/tests/status_and_layout.rs | 20 +- codex-rs/tui/src/chatwidget/turn_runtime.rs | 49 +- codex-rs/tui/src/lib.rs | 1 + codex-rs/tui/src/status/mod.rs | 1 + 69 files changed, 3454 insertions(+), 69 deletions(-) create mode 100644 codex-rs/tui/src/app/backend_banner_fallback.rs create mode 100644 codex-rs/tui/src/app/rate_limit_refresh.rs create mode 100644 codex-rs/tui/src/app/tests/backend_banner_fallback_tests.rs create mode 100644 codex-rs/tui/src/app/tests/backend_banner_recovery_tests.rs create mode 100644 codex-rs/tui/src/app/tests/backend_banner_startup_tests.rs create mode 100644 codex-rs/tui/src/app/tests/snapshots/codex_tui__app__tests__backend_banner_fallback_tests__backend_banner_after_fallback.snap create mode 100644 codex-rs/tui/src/app/tests/snapshots/codex_tui__app__tests__backend_banner_fallback_tests__backend_banner_fallback_notice.snap create mode 100644 codex-rs/tui/src/app/tests/snapshots/codex_tui__app__tests__backend_banner_fallback_tests__backend_banner_fallback_unavailable.snap create mode 100644 codex-rs/tui/src/backend_banners.rs create mode 100644 codex-rs/tui/src/backend_banners/actions.rs create mode 100644 codex-rs/tui/src/backend_banners/render.rs create mode 100644 codex-rs/tui/src/backend_banners_tests.rs create mode 100644 codex-rs/tui/src/bottom_pane/actionable_banner.rs create mode 100644 codex-rs/tui/src/bottom_pane/snapshots/codex_tui__bottom_pane__tests__backend_banner_personal_limit.snap create mode 100644 codex-rs/tui/src/bottom_pane/snapshots/codex_tui__bottom_pane__tests__backend_banner_workspace_member_credits.snap create mode 100644 codex-rs/tui/src/bottom_pane/snapshots/codex_tui__bottom_pane__tests__inline_banner_wrapped_and_truncated.snap create mode 100644 codex-rs/tui/src/bottom_pane/tests/actionable_banner_tests.rs create mode 100644 codex-rs/tui/src/bottom_pane/tests/snapshots/codex_tui__bottom_pane__tests__actionable_banner_tests__information_banner_dismissible.snap create mode 100644 codex-rs/tui/src/bottom_pane/tests/snapshots/codex_tui__bottom_pane__tests__actionable_banner_tests__information_banner_persistent.snap create mode 100644 codex-rs/tui/src/chatwidget/backend_banners.rs create mode 100644 codex-rs/tui/src/chatwidget/tests/backend_banners_tests.rs create mode 100644 codex-rs/tui/src/chatwidget/tests/rate_limit_recovery_tests.rs create mode 100644 codex-rs/tui/src/chatwidget/tests/snapshots/codex_tui__chatwidget__tests__backend_banners_tests__backend_banner_information_dismissible.snap create mode 100644 codex-rs/tui/src/chatwidget/tests/snapshots/codex_tui__chatwidget__tests__backend_banners_tests__backend_banner_information_only.snap create mode 100644 codex-rs/tui/src/chatwidget/tests/snapshots/codex_tui__chatwidget__tests__backend_banners_tests__backend_banner_notification.snap create mode 100644 codex-rs/tui/src/chatwidget/tests/snapshots/codex_tui__chatwidget__tests__backend_banners_tests__owner_notification_after_account_change.snap diff --git a/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.schemas.json b/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.schemas.json index f1c4329b43..04211b73f8 100644 --- a/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.schemas.json +++ b/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.schemas.json @@ -12163,6 +12163,13 @@ "GetAccountRateLimitsResponse": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { + "accountId": { + "description": "Account associated with this usage snapshot, when supplied by the backend.", + "type": [ + "string", + "null" + ] + }, "rateLimitResetCredits": { "anyOf": [ { @@ -12173,6 +12180,9 @@ } ] }, + "rateLimitUpsell": { + "description": "Optional backend-owned banner from the same usage read. Its nested keys retain the backend's snake_case contract; an absent banner leaves the client's existing UI unchanged." + }, "rateLimits": { "allOf": [ { diff --git a/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.v2.schemas.json b/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.v2.schemas.json index fc6a00e089..f5c16692a8 100644 --- a/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.v2.schemas.json +++ b/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.v2.schemas.json @@ -8174,6 +8174,13 @@ "GetAccountRateLimitsResponse": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { + "accountId": { + "description": "Account associated with this usage snapshot, when supplied by the backend.", + "type": [ + "string", + "null" + ] + }, "rateLimitResetCredits": { "anyOf": [ { @@ -8184,6 +8191,9 @@ } ] }, + "rateLimitUpsell": { + "description": "Optional backend-owned banner from the same usage read. Its nested keys retain the backend's snake_case contract; an absent banner leaves the client's existing UI unchanged." + }, "rateLimits": { "allOf": [ { diff --git a/codex-rs/app-server-protocol/schema/json/v2/GetAccountRateLimitsResponse.json b/codex-rs/app-server-protocol/schema/json/v2/GetAccountRateLimitsResponse.json index fac45c36ac..abb94b127e 100644 --- a/codex-rs/app-server-protocol/schema/json/v2/GetAccountRateLimitsResponse.json +++ b/codex-rs/app-server-protocol/schema/json/v2/GetAccountRateLimitsResponse.json @@ -277,6 +277,13 @@ } }, "properties": { + "accountId": { + "description": "Account associated with this usage snapshot, when supplied by the backend.", + "type": [ + "string", + "null" + ] + }, "rateLimitResetCredits": { "anyOf": [ { @@ -287,6 +294,9 @@ } ] }, + "rateLimitUpsell": { + "description": "Optional backend-owned banner from the same usage read. Its nested keys retain the backend's snake_case contract; an absent banner leaves the client's existing UI unchanged." + }, "rateLimits": { "allOf": [ { diff --git a/codex-rs/app-server-protocol/schema/precomputed/app-server-exports-experimental.json.zst b/codex-rs/app-server-protocol/schema/precomputed/app-server-exports-experimental.json.zst index 1415cb301a7de3e8a08b6e6915abbb88abe41f47..92088f4c20212faae49ab6885e0c9c1dca872439 100644 GIT binary patch delta 133158 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

x#OdrbUtud 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%0DkCAl|q1NDVNO2-_U#Yjcj6L9D6G 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 k;@u-pRgMru9ye9ZA!H3fG>Hq)$ delta 133012 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 diff --git a/codex-rs/app-server-protocol/schema/precomputed/app-server-exports-stable.json.zst b/codex-rs/app-server-protocol/schema/precomputed/app-server-exports-stable.json.zst index 93d16b7ebab159bcde01b8174b2b5b829270a8b9..7893421a831663976cb862f4458f89f4f9965470 100644 GIT binary patch delta 127626 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

G241hd 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%0D{IA7=UjBgk&tpo{g4&Tvu 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 diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/GetAccountRateLimitsResponse.ts b/codex-rs/app-server-protocol/schema/typescript/v2/GetAccountRateLimitsResponse.ts index af400634e5..548bd959a8 100644 --- a/codex-rs/app-server-protocol/schema/typescript/v2/GetAccountRateLimitsResponse.ts +++ b/codex-rs/app-server-protocol/schema/typescript/v2/GetAccountRateLimitsResponse.ts @@ -1,6 +1,7 @@ // GENERATED CODE! DO NOT MODIFY BY HAND! // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. +import type { JsonValue } from "../serde_json/JsonValue"; import type { RateLimitResetCreditsSummary } from "./RateLimitResetCreditsSummary"; import type { RateLimitSnapshot } from "./RateLimitSnapshot"; @@ -12,4 +13,13 @@ rateLimits: RateLimitSnapshot, /** * Multi-bucket view keyed by metered `limit_id` (for example, `codex`). */ -rateLimitsByLimitId: { [key in string]?: RateLimitSnapshot } | null, rateLimitResetCredits: RateLimitResetCreditsSummary | null, }; +rateLimitsByLimitId: { [key in string]?: RateLimitSnapshot } | null, rateLimitResetCredits: RateLimitResetCreditsSummary | null, +/** + * Account associated with this usage snapshot, when supplied by the backend. + */ +accountId: string | null, +/** + * Optional backend-owned banner from the same usage read. Its nested keys retain the + * backend's snake_case contract; an absent banner leaves the client's existing UI unchanged. + */ +rateLimitUpsell: JsonValue | null, }; diff --git a/codex-rs/app-server-protocol/src/protocol/v2/account.rs b/codex-rs/app-server-protocol/src/protocol/v2/account.rs index 017f022efa..47990a49a7 100644 --- a/codex-rs/app-server-protocol/src/protocol/v2/account.rs +++ b/codex-rs/app-server-protocol/src/protocol/v2/account.rs @@ -317,6 +317,11 @@ pub struct GetAccountRateLimitsResponse { /// Multi-bucket view keyed by metered `limit_id` (for example, `codex`). pub rate_limits_by_limit_id: Option>, pub rate_limit_reset_credits: Option, + /// Account associated with this usage snapshot, when supplied by the backend. + pub account_id: Option, + /// Optional backend-owned banner from the same usage read. Its nested keys retain the + /// backend's snake_case contract; an absent banner leaves the client's existing UI unchanged. + pub rate_limit_upsell: Option, } #[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, JsonSchema, TS)] diff --git a/codex-rs/app-server/README.md b/codex-rs/app-server/README.md index 34151acea5..5b99a2b2d0 100644 --- a/codex-rs/app-server/README.md +++ b/codex-rs/app-server/README.md @@ -2470,7 +2470,7 @@ Codex supports these authentication modes. The current mode is surfaced in `acco - `account/login/cancel` — cancel a pending managed ChatGPT login by `loginId`. - `account/logout` — sign out; triggers `account/updated` on success. - `account/updated` (notify) — emitted whenever auth mode changes (`authMode`: `apikey`, `bedrockApiKey`, `bedrockAccessKeys`, `chatgpt`, `personalAccessToken`, or `null`) and includes the current ChatGPT `planType` when available. -- `account/rateLimits/read` — fetch ChatGPT rate limits, an optional effective monthly credit limit, whether spend control has been reached, and the earned rate-limit resets currently available, including expiry details when provided by the backend. Rate-limit updates arrive via `account/rateLimits/updated` (notify); reset-credit data is snapshot-only. +- `account/rateLimits/read` — fetch ChatGPT rate limits, an optional effective monthly credit limit, whether spend control has been reached, and the earned rate-limit resets currently available, including expiry details when provided by the backend. Rate-limit updates arrive via `account/rateLimits/updated` (notify); reset-credit and backend-banner data are snapshot-only. - `account/rateLimitResetCredit/consume` — consume one earned reset using a caller-provided idempotency key, optionally selecting a reset-credit ID returned by `account/rateLimits/read`. - `account/usage/read` — fetch ChatGPT account token-activity summary and daily buckets, or pass a valid thread UUID as `threadId` to read estimated credits, optional cost, and usage breakdowns for one thread using the app-server's active account. The optional `threadUsage` response field is absent on older servers and `null` when the billing route is unavailable. - `account/workspaceMessages/read` — fetch active workspace messages, including workspace notification headlines when available. @@ -2712,6 +2712,8 @@ Field notes: - `resetsAt` is a Unix timestamp (seconds) for the next reset. - `rateLimitReachedType` identifies the backend-classified limit state when one has been reached. - `individualLimit` describes the effective monthly credit limit when available. In an `account/rateLimits/read` response, `null` means no monthly limit is available. In a sparse `account/rateLimits/updated` notification, nullable account metadata may be unavailable and does not clear a previously observed value. +- `accountId` identifies the account in the usage snapshot when the backend supplies it. +- `rateLimitUpsell` carries the optional backend-owned `rate_limit_upsell` object from the same usage request, preserving its nested snake_case fields. The backend controls eligibility; clients do not evaluate an experiment or issue another request for it. A missing, null, or unsupported banner leaves the existing client UI in place. Banners whose account or user does not match the authenticated identity are omitted. Sparse notifications do not clear this snapshot-only field. - `rateLimitResetCredits` contains the available earned-reset count when the backend provides it; otherwise it is `null`. - `rateLimitResetCredits.credits` is `null` when only the count is available. An empty array means details were fetched and no available credits were returned. - The backend may cap `rateLimitResetCredits.credits`, so `availableCount` is the authoritative total and can be greater than the number of detail rows. diff --git a/codex-rs/app-server/src/request_processors/account_processor.rs b/codex-rs/app-server/src/request_processors/account_processor.rs index d966fd6084..d3e9165a7c 100644 --- a/codex-rs/app-server/src/request_processors/account_processor.rs +++ b/codex-rs/app-server/src/request_processors/account_processor.rs @@ -1189,6 +1189,16 @@ impl AccountRequestProcessor { }) }); + // Match desktop's account readiness check before exposing account-bound CTA content. + // Normal rate limits remain available when older backends omit identity or banner data. + let rate_limit_upsell = response.rate_limit_upsell.filter(|_| { + !auth.is_fedramp_account() + && response.account_id.is_some() + && response.account_id == auth.get_account_id() + && response.user_id.is_some() + && response.user_id == auth.get_chatgpt_user_id() + }); + Ok(GetAccountRateLimitsResponse { rate_limits: rate_limits.into(), rate_limits_by_limit_id: Some( @@ -1198,6 +1208,8 @@ impl AccountRequestProcessor { .collect(), ), rate_limit_reset_credits, + account_id: response.account_id, + rate_limit_upsell, }) } diff --git a/codex-rs/app-server/tests/common/auth_fixtures.rs b/codex-rs/app-server/tests/common/auth_fixtures.rs index 2303f9be18..24fbd1c6b5 100644 --- a/codex-rs/app-server/tests/common/auth_fixtures.rs +++ b/codex-rs/app-server/tests/common/auth_fixtures.rs @@ -83,6 +83,7 @@ pub struct ChatGptIdTokenClaims { pub plan_type: Option, pub chatgpt_user_id: Option, pub chatgpt_account_id: Option, + pub chatgpt_account_is_fedramp: bool, } impl ChatGptIdTokenClaims { @@ -127,6 +128,9 @@ pub fn encode_id_token(claims: &ChatGptIdTokenClaims) -> Result { if let Some(chatgpt_account_id) = &claims.chatgpt_account_id { auth_payload.insert("chatgpt_account_id".to_string(), json!(chatgpt_account_id)); } + if claims.chatgpt_account_is_fedramp { + auth_payload.insert("chatgpt_account_is_fedramp".to_string(), json!(true)); + } if !auth_payload.is_empty() { payload.insert( "https://api.openai.com/auth".to_string(), diff --git a/codex-rs/app-server/tests/suite/v2/rate_limits.rs b/codex-rs/app-server/tests/suite/v2/rate_limits.rs index 8103f9fa3f..41d475b726 100644 --- a/codex-rs/app-server/tests/suite/v2/rate_limits.rs +++ b/codex-rs/app-server/tests/suite/v2/rate_limits.rs @@ -1,5 +1,6 @@ use anyhow::Result; use app_test_support::ChatGptAuthFixture; +use app_test_support::ChatGptIdTokenClaims; use app_test_support::TestAppServer; use app_test_support::write_chatgpt_auth; use codex_app_server_protocol::AddCreditsNudgeCreditType; @@ -109,6 +110,7 @@ async fn get_account_rate_limits_returns_snapshot( codex_home.path(), ChatGptAuthFixture::new("chatgpt-token") .account_id("account-123") + .chatgpt_user_id("user-123") .plan_type("pro"), AuthCredentialsStoreMode::File, )?; @@ -133,7 +135,17 @@ async fn get_account_rate_limits_returns_snapshot( chrono::DateTime::parse_from_rfc3339("2026-06-18T00:00:00Z") .expect("parse second reset credit grant timestamp") .timestamp(); + let banner = json!({ + "banner_type": "selected_model_limit_reached", + "title": "Usage limit reached", + "description": "View your usage.", + "ctas": [{"action": "view_usage", "label": "View usage"}] + }); let response_body = json!({ + "account_id": "account-123", + "user_id": "user-123", + "rate_limit_upsell": banner, + "plan_type": plan_type, "rate_limit": { "allowed": true, @@ -237,6 +249,8 @@ async fn get_account_rate_limits_returns_snapshot( timeout(DEFAULT_READ_TIMEOUT, mcp.read_response(request_id)).await??; let expected = GetAccountRateLimitsResponse { + account_id: Some("account-123".to_string()), + rate_limit_upsell: Some(banner), rate_limits: RateLimitSnapshot { limit_id: Some("codex".to_string()), limit_name: None, @@ -343,6 +357,85 @@ async fn get_account_rate_limits_returns_snapshot( Ok(()) } +#[test_case(Some("workspace-a"), Some("user-a"), /*restricted*/ false, /*permitted*/ true; "matching_identity")] +#[test_case(Some("workspace-b"), Some("user-a"), /*restricted*/ false, /*permitted*/ false; "account_mismatch")] +#[test_case(Some("workspace-a"), Some("user-b"), /*restricted*/ false, /*permitted*/ false; "user_mismatch")] +#[test_case(/*account*/ None, Some("user-a"), /*restricted*/ false, /*permitted*/ false; "missing_account")] +#[test_case(Some("workspace-a"), /*user*/ None, /*restricted*/ false, /*permitted*/ false; "missing_user")] +#[test_case(Some("workspace-a"), Some("user-a"), /*restricted*/ true, /*permitted*/ false; "restricted_account")] +#[tokio::test] +async fn get_account_rate_limits_filters_banner_by_identity( + account: Option<&str>, + user: Option<&str>, + restricted: bool, + permitted: bool, +) -> Result<()> { + let codex_home = TempDir::new()?; + let mut claims = ChatGptIdTokenClaims::new() + .plan_type("team") + .chatgpt_user_id("user-a"); + claims.chatgpt_account_is_fedramp = restricted; + write_chatgpt_auth( + codex_home.path(), + ChatGptAuthFixture::new("chatgpt-token") + .account_id("workspace-a") + .claims(claims), + AuthCredentialsStoreMode::File, + )?; + + let server = MockServer::start().await; + write_chatgpt_base_url(codex_home.path(), &server.uri())?; + let banner = json!({ + "banner_type": "selected_model_limit", "model_slug": "test-model-a", + "presentation": "inline", "title": "Usage limit reached", + "description": "Contact your owner.", + "ctas": [{"action": "notify_owner", "label": "Notify owner"}] + }); + Mock::given(method("GET")) + .and(path("/api/codex/usage")) + .and(header("authorization", "Bearer chatgpt-token")) + .and(header("chatgpt-account-id", "workspace-a")) + .respond_with(ResponseTemplate::new(200).set_body_json(json!({ + "account_id": account, "user_id": user, "plan_type": "team", + "rate_limit": {"allowed": true, "limit_reached": false, + "primary_window": {"used_percent": 42, "limit_window_seconds": 3600, + "reset_after_seconds": 120, "reset_at": 2000000000}}, + "rate_limit_upsell": banner, "rate_limit_reset_credits": {"available_count": 0} + }))) + .expect(1) + .mount(&server) + .await; + Mock::given(method("GET")) + .and(path("/api/codex/rate-limit-reset-credits")) + .respond_with(ResponseTemplate::new(200).set_body_json(json!({ + "available_count": 0, "credits": [] + }))) + .expect(1) + .mount(&server) + .await; + + let mut mcp = TestAppServer::builder() + .with_codex_home(codex_home.path()) + .with_env_overrides(&[("OPENAI_API_KEY", None)]) + .build_initialized_with_timeout(DEFAULT_READ_TIMEOUT) + .await?; + let request_id = mcp.send_get_account_rate_limits_request().await?; + let received: GetAccountRateLimitsResponse = + timeout(DEFAULT_READ_TIMEOUT, mcp.read_response(request_id)).await??; + let snapshot = json!({ + "limitId": "codex", "planType": "team", + "primary": {"usedPercent": 42, "windowDurationMins": 60, "resetsAt": 2000000000} + }); + let expected: GetAccountRateLimitsResponse = serde_json::from_value(json!({ + "accountId": account, "rateLimitUpsell": if permitted { Some(banner) } else { None }, + "rateLimits": snapshot, "rateLimitsByLimitId": {"codex": snapshot}, + "rateLimitResetCredits": {"availableCount": 0, "credits": []} + }))?; + assert_eq!(received, expected); + server.verify().await; + Ok(()) +} + #[tokio::test] async fn get_account_rate_limits_preserves_count_when_reset_credit_details_fail() -> Result<()> { let codex_home = TempDir::new()?; diff --git a/codex-rs/backend-client/src/client/rate_limit_resets.rs b/codex-rs/backend-client/src/client/rate_limit_resets.rs index 90bedfb24a..5ff565f4be 100644 --- a/codex-rs/backend-client/src/client/rate_limit_resets.rs +++ b/codex-rs/backend-client/src/client/rate_limit_resets.rs @@ -25,6 +25,9 @@ impl Client { Ok(RateLimitsWithResetCredits { rate_limits: Self::rate_limit_snapshots_from_payload(payload.rate_limits), rate_limit_reset_credits: payload.rate_limit_reset_credits, + account_id: payload.account_id, + user_id: payload.user_id, + rate_limit_upsell: payload.rate_limit_upsell, }) } diff --git a/codex-rs/backend-client/src/types.rs b/codex-rs/backend-client/src/types.rs index 69185887ba..b5a2e960b5 100644 --- a/codex-rs/backend-client/src/types.rs +++ b/codex-rs/backend-client/src/types.rs @@ -45,6 +45,9 @@ pub struct RateLimitResetCreditDetails { pub struct RateLimitsWithResetCredits { pub rate_limits: Vec, pub rate_limit_reset_credits: Option, + pub account_id: Option, + pub user_id: Option, + pub rate_limit_upsell: Option, } #[derive(Clone, Debug, Deserialize, PartialEq)] @@ -52,6 +55,10 @@ pub(crate) struct RateLimitStatusWithResetCredits { #[serde(flatten)] pub rate_limits: RateLimitStatusPayload, pub rate_limit_reset_credits: Option, + pub account_id: Option, + pub user_id: Option, + // Preserve the backend-owned banner contract without making optional UI data break usage. + pub rate_limit_upsell: Option, } #[derive(Clone, Debug, Deserialize, PartialEq, Eq)] diff --git a/codex-rs/tui/src/app.rs b/codex-rs/tui/src/app.rs index 6621bcab65..f064fd018e 100644 --- a/codex-rs/tui/src/app.rs +++ b/codex-rs/tui/src/app.rs @@ -211,6 +211,7 @@ pub(crate) use agents_overview::AGENTS_OVERVIEW_VIEW_ID; mod app_server_event_targets; mod app_server_events; pub(crate) mod app_server_requests; +mod backend_banner_fallback; mod background_requests; mod config_persistence; mod connector_mentions; @@ -226,6 +227,7 @@ mod permission_shortcuts; mod pets; mod platform_actions; mod plugin_mentions; +mod rate_limit_refresh; mod recap; mod replay_filter; mod resize_reflow; @@ -627,6 +629,7 @@ pub(crate) struct App { startup_pending_protected_request: bool, /// Invalidates in-flight full rate-limit reads when a newer rolling hard stop arrives. rate_limit_hard_stop_generation: u64, + rate_limit_refresh_state: rate_limit_refresh::RateLimitRefreshState, // Serialize plugin enablement writes per plugin so stale completions cannot // overwrite a newer toggle, even if the plugin is toggled from different // cwd contexts. diff --git a/codex-rs/tui/src/app/app_server_events.rs b/codex-rs/tui/src/app/app_server_events.rs index 624768803c..aa5d89e2bc 100644 --- a/codex-rs/tui/src/app/app_server_events.rs +++ b/codex-rs/tui/src/app/app_server_events.rs @@ -7,6 +7,7 @@ use super::app_server_event_targets::server_notification_thread_target; use super::app_server_event_targets::server_request_thread_id; use crate::app_command::AppCommand; use crate::app_event::AppEvent; +use crate::app_event::RateLimitRefreshOrigin; use crate::app_info::app_info_from_api; use crate::app_server_session::AppServerSession; use crate::app_server_session::status_account_display_from_auth_mode; @@ -178,7 +179,7 @@ impl App { self.refresh_mcp_startup_expected_servers_from_config(); } ServerNotification::AccountRateLimitsUpdated(notification) => { - if matches!( + let workspace_hard_stop = matches!( notification.rate_limits.rate_limit_reached_type, Some( RateLimitReachedType::WorkspaceOwnerCreditsDepleted @@ -186,16 +187,24 @@ impl App { | RateLimitReachedType::WorkspaceOwnerUsageLimitReached | RateLimitReachedType::WorkspaceMemberUsageLimitReached ) - ) || notification.rate_limits.spend_control_reached == Some(true) - { + ) || notification.rate_limits.spend_control_reached + == Some(true); + if workspace_hard_stop { self.rate_limit_hard_stop_generation = self.rate_limit_hard_stop_generation.wrapping_add(1); } self.chat_widget .on_rolling_rate_limit_snapshot(notification.rate_limits.clone()); + if workspace_hard_stop && self.chat_widget.has_chatgpt_account() { + // Background inference may publish a hard stop without a foreground Error. + self.refresh_rate_limits(app_server_client, RateLimitRefreshOrigin::Recovery); + } return; } ServerNotification::AccountUpdated(notification) => { + self.rate_limit_hard_stop_generation = + self.rate_limit_hard_stop_generation.wrapping_add(1); + self.rate_limit_refresh_state.invalidate_recovery(); // Deferred terminal writes must never carry the previous account's billing into // the newly authenticated identity, even when both accounts share one thread. self.last_thread_usage_status_cell = None; diff --git a/codex-rs/tui/src/app/backend_banner_fallback.rs b/codex-rs/tui/src/app/backend_banner_fallback.rs new file mode 100644 index 0000000000..c173bb07d7 --- /dev/null +++ b/codex-rs/tui/src/app/backend_banner_fallback.rs @@ -0,0 +1,64 @@ +//! Apply an accepted account usage response to the currently selected task and model. + +use super::App; +use crate::app_server_session::AppServerSession; +use crate::service_tier_resolution; +use codex_app_server_protocol::ThreadSettingsUpdateParams; + +impl App { + pub(super) async fn apply_backend_banner_fallback( + &mut self, + app_server: &mut AppServerSession, + ) { + let Some(thread_id) = self.active_thread_id else { + return; + }; + if Some(thread_id) != self.chat_widget.thread_id() { + return; + } + let Some(target) = self.chat_widget.backend_banner_fallback() else { + return; + }; + let effort = self + .chat_widget + .current_reasoning_effort() + .filter(|effort| { + target + .supported_reasoning_efforts + .iter() + .any(|option| option.effort == *effort) + }) + .unwrap_or(target.default_reasoning_effort); + let mut mode = self.chat_widget.effective_collaboration_mode(); + mode.settings.model = target.model.clone(); + mode.settings.reasoning_effort = Some(effort.clone()); + // Automatic recovery must not apply the permission defaults used by manual model selection. + let params = ThreadSettingsUpdateParams { + thread_id: thread_id.to_string(), + model: Some(target.model.clone()), + effort: Some(effort.clone()), + collaboration_mode: Some(mode.clone()), + service_tier: service_tier_resolution::service_tier_update_for_core( + self.chat_widget.config_ref(), + &target.model, + &self.model_catalog.try_list_models().unwrap_or_default(), + ), + ..ThreadSettingsUpdateParams::default() + }; + // Older remote servers can decline this method. Keep the existing recovery UI in that + // case or on failure, rather than changing local selection before the task accepts it. + // Event dispatch awaits this operation; a queued manual model selection runs afterward. + if self.send_thread_settings_update(app_server, params).await { + self.chat_widget.finish_backend_banner_fallback(mode); + self.sync_active_thread_service_tier_to_cached_session() + .await; + let mut message = format!("Automatically switched to {}", target.model); + if let Some(label) = Self::reasoning_label_for(&target.model, Some(&effort)) { + message.push(' '); + message.push_str(&label); + } + message.push_str(" due to usage limits."); + self.chat_widget.add_info_message(message, /*hint*/ None); + } + } +} diff --git a/codex-rs/tui/src/app/background_requests.rs b/codex-rs/tui/src/app/background_requests.rs index b27c39e498..c39f5c6375 100644 --- a/codex-rs/tui/src/app/background_requests.rs +++ b/codex-rs/tui/src/app/background_requests.rs @@ -73,22 +73,33 @@ impl App { /// Spawns a background task to fetch account rate limits and deliver the /// result as a `RateLimitsLoaded` event. /// - /// The `origin` is forwarded to the completion handler so it can distinguish - /// a startup prefetch (which updates cached snapshots and may surface a - /// reset-credit notice) from a `/status`-triggered refresh (which must - /// finalize the corresponding status card). + /// Recovery requests are coalesced and bounded by the reset-request timeout. The origin + /// also identifies command-specific completion work, such as finalizing a `/status` card, + /// without confusing sparse inference notifications with authoritative usage responses. pub(super) fn refresh_rate_limits( &mut self, app_server: &AppServerSession, origin: RateLimitRefreshOrigin, ) { + if matches!( + origin, + RateLimitRefreshOrigin::Recovery | RateLimitRefreshOrigin::ResetConsume { .. } + ) { + self.chat_widget.hold_rate_limit_recovery(); + } + let Some((request_id, hard_stop_generation)) = self + .rate_limit_refresh_state + .start(origin, &mut self.rate_limit_hard_stop_generation) + else { + return; + }; let request_handle = app_server.request_handle(); let app_event_tx = self.app_event_tx.clone(); - let hard_stop_generation = self.rate_limit_hard_stop_generation; tokio::spawn(async move { let request = fetch_account_rate_limits(request_handle); let result = match origin { - RateLimitRefreshOrigin::ResetConsume { .. } + RateLimitRefreshOrigin::Recovery + | RateLimitRefreshOrigin::ResetConsume { .. } | RateLimitRefreshOrigin::ResetPicker { .. } => { tokio::time::timeout(RATE_LIMIT_RESET_REQUEST_TIMEOUT, request) .await @@ -102,6 +113,7 @@ impl App { } }; app_event_tx.send(AppEvent::RateLimitsLoaded { + request_id, origin, hard_stop_generation, result, @@ -208,6 +220,7 @@ impl App { pub(super) fn send_add_credits_nudge_email( &mut self, app_server: &AppServerSession, + request_id: Uuid, credit_type: AddCreditsNudgeCreditType, ) { let request_handle = app_server.request_handle(); @@ -216,7 +229,7 @@ impl App { let result = send_add_credits_nudge_email(request_handle, credit_type) .await .map_err(|err| err.to_string()); - app_event_tx.send(AppEvent::AddCreditsNudgeEmailFinished { result }); + app_event_tx.send(AppEvent::AddCreditsNudgeEmailFinished { request_id, result }); }); } diff --git a/codex-rs/tui/src/app/event_dispatch.rs b/codex-rs/tui/src/app/event_dispatch.rs index 84840b0332..055612ef0b 100644 --- a/codex-rs/tui/src/app/event_dispatch.rs +++ b/codex-rs/tui/src/app/event_dispatch.rs @@ -3,6 +3,8 @@ //! This module contains the exhaustive `AppEvent` dispatcher and exit-mode handling. Large domain //! actions are delegated to focused app submodules so the central match remains the routing layer. +use super::rate_limit_refresh::RateLimitReadStatus; +use super::rate_limit_refresh::RateLimitRefreshOutcome; use super::resize_reflow::trailing_run_start; use super::session_lifecycle::ThreadAttachPresentation; use super::*; @@ -1234,31 +1236,58 @@ impl App { self.clear_thread_goal(app_server, thread_id).await; } AppEvent::SendAddCreditsNudgeEmail { credit_type } => { - if self + if let Some(request_id) = self .chat_widget .start_add_credits_nudge_email_request(credit_type) { - self.send_add_credits_nudge_email(app_server, credit_type); + self.send_add_credits_nudge_email(app_server, request_id, credit_type); } } - AppEvent::AddCreditsNudgeEmailFinished { result } => { + AppEvent::AddCreditsNudgeEmailFinished { request_id, result } => { self.chat_widget - .finish_add_credits_nudge_email_request(result); + .finish_add_credits_nudge_email_request(request_id, result); } AppEvent::RateLimitsLoaded { + request_id, origin, hard_stop_generation, result, - } => match result { + } => { + let accepted = match self.rate_limit_refresh_state.finish( + request_id, + hard_stop_generation, + self.rate_limit_hard_stop_generation, + if result.is_ok() { + RateLimitReadStatus::Succeeded + } else { + RateLimitReadStatus::Failed + }, + ) { + RateLimitRefreshOutcome::Apply => true, + RateLimitRefreshOutcome::Ignore => false, + RateLimitRefreshOutcome::RefreshRecovery => { + // Start in this account's event turn; a queued refresh could cross an account change. + self.refresh_rate_limits(app_server, RateLimitRefreshOrigin::Recovery); + false + } + }; + match result { Ok(response) => { let rate_limit_reset_credits = response.rate_limit_reset_credits.clone(); - let snapshots = if hard_stop_generation == self.rate_limit_hard_stop_generation + let snapshots = if accepted { + self.chat_widget.update_backend_banner(&response); + self.apply_backend_banner_fallback(app_server).await; app_server_rate_limit_snapshots(response) } else { Vec::new() }; match origin { + RateLimitRefreshOrigin::Recovery => { + for snapshot in snapshots { + self.chat_widget.on_rate_limit_snapshot(Some(snapshot)); + } + } RateLimitRefreshOrigin::StartupPrefetch { reset_hint_request_id, } => { @@ -1312,8 +1341,10 @@ impl App { } } Err(err) => { + // A failed read is not authoritative recovery. Keep the last valid banner. tracing::warn!("account/rateLimits/read failed during TUI refresh: {err}"); match origin { + RateLimitRefreshOrigin::Recovery => {}, RateLimitRefreshOrigin::StartupPrefetch { reset_hint_request_id, } => { @@ -1350,6 +1381,14 @@ impl App { } } } + } + if matches!( + origin, + RateLimitRefreshOrigin::Recovery | RateLimitRefreshOrigin::ResetConsume { .. } + ) && !self.rate_limit_refresh_state.has_pending_recovery() + { + self.chat_widget.finish_rate_limit_recovery(); + } }, AppEvent::OpenTokenActivity => { self.chat_widget @@ -1412,6 +1451,11 @@ impl App { credit_id, result, ) { + // Reads started before redemption must not restore the pre-reset banner. + self.rate_limit_hard_stop_generation = + self.rate_limit_hard_stop_generation.wrapping_add(1); + self.rate_limit_refresh_state.invalidate_recovery(); + self.chat_widget.clear_backend_banner(); self.refresh_rate_limits( app_server, RateLimitRefreshOrigin::ResetConsume { request_id }, diff --git a/codex-rs/tui/src/app/rate_limit_refresh.rs b/codex-rs/tui/src/app/rate_limit_refresh.rs new file mode 100644 index 0000000000..51828e8d95 --- /dev/null +++ b/codex-rs/tui/src/app/rate_limit_refresh.rs @@ -0,0 +1,96 @@ +//! Orders full usage reads and coalesces recovery refreshes within an account/limit generation. + +use crate::app_event::RateLimitRefreshOrigin; + +#[derive(Default)] +pub(super) struct RateLimitRefreshState { + next_id: u64, + applied_id: u64, + recovery: Option, +} + +struct PendingRecovery { + request: (u64, u64), + origin: RateLimitRefreshOrigin, +} + +#[derive(Debug, PartialEq, Eq)] +pub(super) enum RateLimitRefreshOutcome { + Apply, + Ignore, + RefreshRecovery, +} + +#[derive(PartialEq, Eq)] +pub(super) enum RateLimitReadStatus { + Succeeded, + Failed, +} + +impl RateLimitRefreshState { + pub(super) fn has_pending_recovery(&self) -> bool { + self.recovery.is_some() + } + + pub(super) fn start( + &mut self, + origin: RateLimitRefreshOrigin, + generation: &mut u64, + ) -> Option<(u64, u64)> { + if matches!(origin, RateLimitRefreshOrigin::Recovery) { + // A new hard error supersedes a post-reset read that started before the error. + if self + .recovery + .as_ref() + .is_some_and(|pending| pending.origin == RateLimitRefreshOrigin::Recovery) + { + return None; + } + // A hard error invalidates even an older read without a preceding rolling notification. + *generation = generation.wrapping_add(1); + } + self.next_id = self.next_id.wrapping_add(1); + let request = (self.next_id, *generation); + // The post-reset read takes over the hold from the invalidated recovery request. + if matches!( + origin, + RateLimitRefreshOrigin::Recovery | RateLimitRefreshOrigin::ResetConsume { .. } + ) { + self.recovery = Some(PendingRecovery { request, origin }); + } + Some(request) + } + + // Account changes and successful resets invalidate the need as well as the old response. + pub(super) fn invalidate_recovery(&mut self) { + self.recovery = None; + } + + pub(super) fn finish( + &mut self, + request_id: u64, + generation: u64, + current_generation: u64, + status: RateLimitReadStatus, + ) -> RateLimitRefreshOutcome { + if self + .recovery + .as_ref() + .is_some_and(|pending| pending.request == (request_id, generation)) + { + self.recovery = None; + // A rolling hard stop can arrive after the error, without another error notification. + if generation != current_generation { + return RateLimitRefreshOutcome::RefreshRecovery; + } + } + if generation != current_generation + || request_id < self.applied_id + || status == RateLimitReadStatus::Failed + { + return RateLimitRefreshOutcome::Ignore; + } + self.applied_id = request_id; + RateLimitRefreshOutcome::Apply + } +} diff --git a/codex-rs/tui/src/app/session_lifecycle.rs b/codex-rs/tui/src/app/session_lifecycle.rs index 4f5622f8f6..9cbeee0883 100644 --- a/codex-rs/tui/src/app/session_lifecycle.rs +++ b/codex-rs/tui/src/app/session_lifecycle.rs @@ -449,6 +449,7 @@ impl App { chat_widget.last_terminal_title = previous_terminal_title; } chat_widget.remote_connection = self.chat_widget.remote_connection.clone(); + chat_widget.inherit_backend_banner_state(&mut self.chat_widget); for (thread_id, entry) in self.agent_navigation.ordered_threads() { chat_widget.set_collab_agent_metadata( thread_id, @@ -706,8 +707,15 @@ impl App { if started.blocks_direct_input { self.mark_primary_thread_parent_owned(thread_id); } + // A full usage read can finish before thread/start. Apply its cached fallback + // after attachment but before the initial prompt or queued draft is submitted. + let recovery_was_pending = self.chat_widget.hold_rate_limit_recovery(); self.enqueue_primary_thread_session(started.session, started.turns) .await?; + self.apply_backend_banner_fallback(app_server).await; + if !recovery_was_pending { + self.chat_widget.finish_rate_limit_recovery(); + } self.chat_widget.maybe_send_next_queued_input(); } Err(err) => { diff --git a/codex-rs/tui/src/app/startup.rs b/codex-rs/tui/src/app/startup.rs index 3f9e665a6c..6756b20294 100644 --- a/codex-rs/tui/src/app/startup.rs +++ b/codex-rs/tui/src/app/startup.rs @@ -537,6 +537,7 @@ See the Codex keymap documentation for supported actions and examples." startup_protected_input_boundary: true, startup_pending_protected_request: false, rate_limit_hard_stop_generation: 0, + rate_limit_refresh_state: Default::default(), pending_plugin_enabled_writes: HashMap::new(), pending_hook_enabled_writes: HashMap::new(), recap: recap::RecapState::default(), diff --git a/codex-rs/tui/src/app/test_support.rs b/codex-rs/tui/src/app/test_support.rs index 82b833b33e..c8a891e1a6 100644 --- a/codex-rs/tui/src/app/test_support.rs +++ b/codex-rs/tui/src/app/test_support.rs @@ -79,6 +79,7 @@ pub(super) async fn make_test_app() -> App { startup_protected_input_boundary: false, startup_pending_protected_request: false, rate_limit_hard_stop_generation: 0, + rate_limit_refresh_state: Default::default(), pending_plugin_enabled_writes: HashMap::new(), pending_hook_enabled_writes: HashMap::new(), recap: recap::RecapState::default(), diff --git a/codex-rs/tui/src/app/tests.rs b/codex-rs/tui/src/app/tests.rs index a360285632..adeca53331 100644 --- a/codex-rs/tui/src/app/tests.rs +++ b/codex-rs/tui/src/app/tests.rs @@ -2,6 +2,12 @@ #[path = "tests/advanced_reasoning_tests.rs"] mod advanced_reasoning_tests; +#[path = "tests/backend_banner_fallback_tests.rs"] +mod backend_banner_fallback_tests; +#[path = "tests/backend_banner_recovery_tests.rs"] +mod backend_banner_recovery_tests; +#[path = "tests/backend_banner_startup_tests.rs"] +mod backend_banner_startup_tests; #[path = "tests/background_exit_tests.rs"] mod background_exit_tests; #[path = "tests/connector_policy.rs"] @@ -5470,6 +5476,7 @@ async fn make_test_app() -> App { startup_protected_input_boundary: false, startup_pending_protected_request: false, rate_limit_hard_stop_generation: 0, + rate_limit_refresh_state: Default::default(), pending_plugin_enabled_writes: HashMap::new(), pending_hook_enabled_writes: HashMap::new(), recap: recap::RecapState::default(), @@ -5551,6 +5558,7 @@ async fn make_test_app_with_channels() -> ( startup_protected_input_boundary: false, startup_pending_protected_request: false, rate_limit_hard_stop_generation: 0, + rate_limit_refresh_state: Default::default(), pending_plugin_enabled_writes: HashMap::new(), pending_hook_enabled_writes: HashMap::new(), recap: recap::RecapState::default(), diff --git a/codex-rs/tui/src/app/tests/backend_banner_fallback_tests.rs b/codex-rs/tui/src/app/tests/backend_banner_fallback_tests.rs new file mode 100644 index 0000000000..c353384fb0 --- /dev/null +++ b/codex-rs/tui/src/app/tests/backend_banner_fallback_tests.rs @@ -0,0 +1,427 @@ +use super::*; +use crate::chatwidget::UserMessage; +use crate::chatwidget::tests::helpers::normalize_snapshot_paths; +use codex_app_server_protocol::GetAccountRateLimitsResponse; +use codex_app_server_protocol::ThreadSettingsUpdateParams; +use pretty_assertions::assert_eq; +use serde_json::json; + +pub(super) fn fallback_response() -> GetAccountRateLimitsResponse { + serde_json::from_value(json!({ + "accountId": "workspace-a", "rateLimits": {}, + "rateLimitUpsell": { + "banner_type": "model_recovery", "model_slug": "gpt-5.4", + "blocked_model_slug": "gpt-5.4", + "fallback_model_slugs": ["unavailable-model", "gpt-5.4", "gpt-5.2"], + "title": "Selected model usage exhausted", + "description": "Add credits to use this model again.", + "presentation": "dismissible", + "ctas": [{"action": "view_usage", "label": "View usage"}] + } + })) + .unwrap() +} + +fn configure_fallback_model(app: &mut App) { + set_chatgpt_auth(&mut app.chat_widget); + set_fast_mode_test_catalog(&mut app.chat_widget); + app.model_catalog = app.chat_widget.model_catalog(); + app.chat_widget.set_model("gpt-5.4"); +} + +async fn start_fallback_thread( + app: &mut App, +) -> Result { + let (mut server, requests, proxy) = session_lifecycle_requests::start_recording_app_server( + &app.config, + /*blocked_thread_list*/ None, + /*failed_thread_name*/ None, + ) + .await?; + let started = server.start_thread(&app.config).await?; + app.enqueue_primary_thread_session(started.session, started.turns) + .await?; + configure_fallback_model(app); + Ok((server, requests, proxy)) +} + +#[tokio::test] +async fn backend_banner_fallback_updates_task_settings_and_keeps_notice() -> Result<()> { + for mode_kind in [ModeKind::Default, ModeKind::Plan] { + let (mut app, mut events, mut ops) = make_test_app_with_channels().await; + let (mut server, requests, proxy) = start_fallback_thread(&mut app).await?; + let thread_id = app.active_thread_id.expect("active fallback thread"); + app.chat_widget + .set_reasoning_effort(Some(ReasoningEffortConfig::Medium)); + if mode_kind == ModeKind::Plan { + app.chat_widget + .handle_key_event(KeyEvent::from(KeyCode::BackTab)); + app.chat_widget + .set_plan_mode_reasoning_effort(Some(ReasoningEffortConfig::High)); + } + app.chat_widget + .set_feature_enabled(Feature::FastMode, /*enabled*/ true); + app.chat_widget + .set_service_tier(Some(ServiceTier::Fast.request_value().to_string())); + let mut expected_mode = app.chat_widget.effective_collaboration_mode(); + assert_eq!(expected_mode.mode, mode_kind); + expected_mode.settings.model = "gpt-5.2".into(); + expected_mode.settings.reasoning_effort = Some(ReasoningEffortConfig::Medium); + let default_model = app.config.model.clone(); + let default_plan_effort = app.config.plan_mode_reasoning_effort.clone(); + let config_path = app.config.codex_home.join("config.toml"); + let saved_config = std::fs::read(&config_path).ok(); + while events.try_recv().is_ok() {} + while ops.try_recv().is_ok() {} + requests.lock().unwrap().clear(); + let response = fallback_response(); + let generation = app.rate_limit_hard_stop_generation; + let mut tui = crate::tui::test_support::make_test_tui()?; + app.handle_event( + &mut tui, + &mut server, + AppEvent::RateLimitsLoaded { + request_id: 1, + origin: RateLimitRefreshOrigin::StatusCommand { request_id: 0 }, + hard_stop_generation: generation, + result: Ok(response.clone()), + }, + ) + .await?; + + let actual_mode = app.chat_widget.effective_collaboration_mode(); + assert_eq!(actual_mode, expected_mode); + assert_eq!(app.chat_widget.current_service_tier(), None); + let sent = requests.lock().unwrap().clone(); + let methods: Vec<_> = sent.iter().map(|request| request.method.as_str()).collect(); + assert_eq!(methods, ["thread/settings/update"]); + assert_eq!( + serde_json::from_value::(sent[0].params.clone().unwrap())?, + ThreadSettingsUpdateParams { + thread_id: thread_id.to_string(), + model: Some("gpt-5.2".into()), + effort: Some(ReasoningEffortConfig::Medium), + collaboration_mode: Some(expected_mode.clone()), + service_tier: Some(Some("default".into())), + ..Default::default() + } + ); + let rendered = render_bottom_popup(&app.chat_widget, /*width*/ 72); + assert!(rendered.contains("Selected model usage exhausted")); + if mode_kind == ModeKind::Default { + insta::assert_snapshot!( + "backend_banner_after_fallback", + normalize_snapshot_paths(rendered) + ); + } + app.chat_widget + .handle_key_event(KeyEvent::new(KeyCode::Char('1'), KeyModifiers::NONE)); + let queued = std::iter::from_fn(|| events.try_recv().ok()).collect::>(); + assert!(queued.iter().any(|event| matches!(event, AppEvent::OpenUrlInBrowser { url } if url == "https://chatgpt.com/codex/settings/usage"))); + let notices = queued + .iter() + .filter_map(|event| match event { + AppEvent::InsertHistoryCell(cell) => { + Some(lines_to_single_string(&cell.display_lines(/*width*/ 80))) + } + _ => None, + }) + .collect::>(); + assert_eq!(notices.len(), 1); + insta::assert_snapshot!("backend_banner_fallback_notice", notices[0]); + assert!(!queued.iter().any(|event| matches!( + event, + AppEvent::PersistModelSelection { .. } | AppEvent::CodexOp(_) + ))); + assert!(ops.try_recv().is_err(), "switch must not replay a turn"); + app.chat_widget + .handle_key_event(KeyEvent::new(KeyCode::Esc, KeyModifiers::NONE)); + app.chat_widget.update_backend_banner(&response); + app.apply_backend_banner_fallback(&mut server).await; + assert!( + !render_bottom_popup(&app.chat_widget, /*width*/ 72) + .contains("Selected model usage exhausted") + ); + let mut healthy = response; + healthy.rate_limit_upsell = None; + app.chat_widget.update_backend_banner(&healthy); + app.apply_backend_banner_fallback(&mut server).await; + assert_eq!(app.chat_widget.current_model(), "gpt-5.2"); + assert_eq!(requests.lock().unwrap().len(), 1); + assert!( + !std::iter::from_fn(|| events.try_recv().ok()) + .any(|event| matches!(event, AppEvent::InsertHistoryCell(_))) + ); + assert_eq!(app.config.model, default_model); + assert_eq!(app.config.plan_mode_reasoning_effort, default_plan_effort); + assert_eq!(std::fs::read(&config_path).ok(), saved_config); + if mode_kind == ModeKind::Plan { + let chat = &mut app.chat_widget; + chat.handle_key_event(KeyEvent::from(KeyCode::BackTab)); + assert_eq!(chat.active_collaboration_mode_kind(), ModeKind::Default); + chat.handle_key_event(KeyEvent::from(KeyCode::BackTab)); + } + app.chat_widget + .restore_user_message_to_composer(UserMessage::from("continue")); + app.chat_widget + .handle_key_event(KeyEvent::new(KeyCode::Enter, KeyModifiers::NONE)); + assert_matches!(next_user_turn_op(&mut ops), AppCommand::UserTurn { model, collaboration_mode: Some(mode), .. } + if model == "gpt-5.2" && mode == expected_mode); + server.shutdown().await?; + proxy.await??; + } + Ok(()) +} + +#[tokio::test] +async fn backend_banner_fallback_uses_current_task_and_accepted_generation() -> Result<()> { + let (mut app, _events, _ops) = make_test_app_with_channels().await; + let (mut server, requests, proxy) = start_fallback_thread(&mut app).await?; + let read_generation = app.rate_limit_hard_stop_generation; + let second = server.start_thread(&app.config).await?; + let active_id = second.session.thread_id; + let mut tui = crate::tui::test_support::make_test_tui()?; + let init = app.chatwidget_init_for_forked_or_resumed_thread( + &mut tui, + app.config.clone(), + /*initial_user_message*/ None, + ); + app.replace_chat_widget(ChatWidget::new_with_app_event(init)); + app.store_active_thread_receiver().await; + app.active_thread_id = None; + app.enqueue_primary_thread_session(second.session, second.turns) + .await?; + configure_fallback_model(&mut app); + requests.lock().unwrap().clear(); + app.rate_limit_hard_stop_generation = read_generation.wrapping_add(1); + for generation in [read_generation, app.rate_limit_hard_stop_generation] { + app.handle_event( + &mut tui, + &mut server, + AppEvent::RateLimitsLoaded { + request_id: 1, + origin: RateLimitRefreshOrigin::StatusCommand { request_id: 0 }, + hard_stop_generation: generation, + result: Ok(fallback_response()), + }, + ) + .await?; + if generation == read_generation { + assert_eq!(app.chat_widget.current_model(), "gpt-5.4"); + assert!(requests.lock().unwrap().is_empty()); + } + } + let sent = requests.lock().unwrap().clone(); + assert_eq!(sent.len(), 1); + assert_eq!( + sent[0].params.as_ref().unwrap()["threadId"], + active_id.to_string() + ); + assert_eq!(app.chat_widget.current_model(), "gpt-5.2"); + server.shutdown().await?; + proxy.await??; + Ok(()) +} + +#[tokio::test] +async fn backend_banner_fallback_keeps_existing_recovery_without_candidate() -> Result<()> { + let (mut app, _events, _ops) = make_test_app_with_channels().await; + let (mut server, requests, proxy) = start_fallback_thread(&mut app).await?; + requests.lock().unwrap().clear(); + for (replacement, expect_legacy_banner) in [ + (json!([]), true), + (json!(["unavailable-model"]), false), + (json!(["gpt-5.4"]), false), + ] { + let mut response = fallback_response(); + response.rate_limit_upsell.as_mut().unwrap()["fallback_model_slugs"] = replacement; + app.chat_widget.update_backend_banner(&response); + app.apply_backend_banner_fallback(&mut server).await; + assert_eq!(app.chat_widget.current_model(), "gpt-5.4"); + let rendered = render_bottom_popup(&app.chat_widget, /*width*/ 72); + assert_eq!(rendered.contains("View usage"), expect_legacy_banner); + if !expect_legacy_banner { + insta::assert_snapshot!( + "backend_banner_fallback_unavailable", + normalize_snapshot_paths(rendered) + ); + } + } + app.chat_widget.set_model("gpt-5.2"); + app.chat_widget.update_backend_banner(&fallback_response()); + app.apply_backend_banner_fallback(&mut server).await; + assert_eq!(app.chat_widget.current_model(), "gpt-5.2"); + assert!( + render_bottom_popup(&app.chat_widget, /*width*/ 72) + .contains("Selected model usage exhausted") + ); + assert!(requests.lock().unwrap().is_empty()); + server.shutdown().await?; + proxy.await??; + Ok(()) +} + +#[tokio::test] +async fn backend_banner_fallback_handles_settings_failure_and_queued_manual_selection() -> Result<()> +{ + use futures::SinkExt; + use futures::StreamExt; + use tokio_tungstenite::tungstenite::Message; + + for error_code in [Some(-32601), Some(-32603), None] { + let (mut app, mut events, _ops) = make_test_app_with_channels().await; + let id = ThreadId::new(); + app.active_thread_id = Some(id); + app.chat_widget + .handle_thread_session(test_thread_session(id, app.config.cwd.to_path_buf())); + configure_fallback_model(&mut app); + let listener = tokio::net::TcpListener::bind("127.0.0.1:0").await?; + let websocket_url = format!("ws://{}", listener.local_addr()?); + let codex_home = app.config.codex_home.display().to_string(); + let manual_selection_tx = app.app_event_tx.clone(); + let fake = tokio::spawn(async move { + let (stream, _) = listener.accept().await?; + let mut socket = tokio_tungstenite::accept_async(stream).await?; + let mut settings_requests = 0; + while let Some(frame) = socket.next().await { + let Message::Text(text) = frame? else { + continue; + }; + let request: serde_json::Value = serde_json::from_str(&text)?; + if request["id"].is_null() { + continue; + } + let response = if request["method"] == "initialize" { + json!({"id": request["id"], "result": {"userAgent": "test", "codexHome": codex_home}}) + } else { + assert_eq!(request["method"], "thread/settings/update"); + settings_requests += 1; + if let Some(error_code) = error_code { + json!({"id": request["id"], "error": {"code": error_code, "message": "settings unavailable"}}) + } else { + if settings_requests == 1 { + // A manual selection arriving while the RPC is pending must win afterward. + manual_selection_tx.send(AppEvent::UpdateModel("gpt-5.4".into())); + } + json!({"id": request["id"], "result": {}}) + } + }; + socket + .send(Message::Text(response.to_string().into())) + .await?; + } + Result::<()>::Ok(()) + }); + let client = crate::connect_remote_app_server(crate::RemoteAppServerEndpoint::WebSocket { + websocket_url, + auth_token: None, + }) + .await?; + let mut server = AppServerSession::new( + client, + crate::app_server_session::ThreadParamsMode::Embedded, + ); + while events.try_recv().is_ok() {} + app.chat_widget.update_backend_banner(&fallback_response()); + app.apply_backend_banner_fallback(&mut server).await; + let queued = std::iter::from_fn(|| events.try_recv().ok()).collect::>(); + let switch_notices = queued + .iter() + .filter(|event| match event { + AppEvent::InsertHistoryCell(cell) => { + lines_to_single_string(&cell.display_lines(/*width*/ 80)) + .contains("Automatically switched") + } + _ => false, + }) + .count(); + assert_eq!(switch_notices, usize::from(error_code.is_none())); + if error_code.is_none() { + assert_eq!(app.chat_widget.current_model(), "gpt-5.2"); + let manual_selection = queued + .into_iter() + .find(|event| matches!(event, AppEvent::UpdateModel(_))) + .unwrap(); + let mut tui = crate::tui::test_support::make_test_tui()?; + app.handle_event(&mut tui, &mut server, manual_selection) + .await?; + } + assert_eq!(app.chat_widget.current_model(), "gpt-5.4"); + assert!(!render_bottom_popup(&app.chat_widget, /*width*/ 72).contains("View usage")); + server.shutdown().await?; + fake.await??; + } + Ok(()) +} + +#[tokio::test] +async fn backend_banner_fallback_preserves_permissions_for_first_eligible_cyber_model() -> Result<()> +{ + let mut app = make_test_app().await; + assert!( + app.apply_permission_profile_selection(PermissionProfileSelection { + profile_id: codex_protocol::models::BUILT_IN_PERMISSION_PROFILE_READ_ONLY.into(), + approval_policy: Some(AskForApproval::UnlessTrusted), + approvals_reviewer: Some(ApprovalsReviewer::User), + display_label: "Read Only".into(), + }) + .await + ); + let mut server = crate::start_embedded_app_server_for_picker(&app.config).await?; + let started = server.start_thread(&app.config).await?; + let thread_id = started.session.thread_id; + app.enqueue_primary_thread_session(started.session, started.turns) + .await?; + configure_fallback_model(&mut app); + let mut models = app.model_catalog.try_list_models()?; + let mut cyber_model = models + .iter() + .find(|model| model.model == "gpt-5.2") + .unwrap() + .clone(); + // Like the manual-selection tests, classify a fixture model through catalog metadata. + cyber_model.model = "cyber-test-model".into(); + cyber_model.model_specialty = Some(MODEL_SPECIALTY_CYBER.into()); + models.push(cyber_model.clone()); + app.model_catalog = Arc::new(ModelCatalog::new(models)); + let mut tui = crate::tui::test_support::make_test_tui()?; + let mut init = app.chatwidget_init_for_forked_or_resumed_thread( + &mut tui, + app.config.clone(), + /*initial_user_message*/ None, + ); + init.model_catalog = app.model_catalog.clone(); + app.replace_chat_widget(ChatWidget::new_with_app_event(init)); + app.chat_widget + .handle_thread_session(app.primary_session_configured.clone().unwrap()); + app.chat_widget.set_model("gpt-5.4"); + app.chat_widget + .set_reasoning_effort(Some(ReasoningEffortConfig::Medium)); + let mut response = fallback_response(); + response.rate_limit_upsell.as_mut().unwrap()["fallback_model_slugs"] = + json!(["unavailable-model", "gpt-5.4", cyber_model.model, "gpt-5.2"]); + app.chat_widget.update_backend_banner(&response); + app.apply_backend_banner_fallback(&mut server).await; + assert_eq!(app.chat_widget.current_model(), cyber_model.model); + let settings = next_thread_settings_updated(&mut server, thread_id) + .await + .thread_settings; + assert_eq!( + ( + settings.model, + settings.effort, + settings.approval_policy, + settings.approvals_reviewer.to_core(), + settings.active_permission_profile.unwrap().id + ), + ( + cyber_model.model, + Some(ReasoningEffortConfig::Medium), + AskForApproval::UnlessTrusted, + ApprovalsReviewer::User, + codex_protocol::models::BUILT_IN_PERMISSION_PROFILE_READ_ONLY.to_string() + ), + ); + server.shutdown().await?; + Ok(()) +} diff --git a/codex-rs/tui/src/app/tests/backend_banner_recovery_tests.rs b/codex-rs/tui/src/app/tests/backend_banner_recovery_tests.rs new file mode 100644 index 0000000000..cf5f7113f6 --- /dev/null +++ b/codex-rs/tui/src/app/tests/backend_banner_recovery_tests.rs @@ -0,0 +1,488 @@ +use super::*; +use crate::app::rate_limit_refresh::RateLimitReadStatus; +use crate::app::rate_limit_refresh::RateLimitRefreshOutcome; +use app_test_support::ChatGptAuthFixture; +use app_test_support::write_chatgpt_auth; +use codex_app_server_protocol::CodexErrorInfo; +use codex_app_server_protocol::ErrorNotification; +use codex_app_server_protocol::GetAccountRateLimitsResponse; +use codex_config::types::AuthCredentialsStoreMode; +use pretty_assertions::assert_eq; +use serde_json::json; +use wiremock::Mock; +use wiremock::MockServer; +use wiremock::ResponseTemplate; +use wiremock::matchers::method; +use wiremock::matchers::path; + +fn response_with_banner() -> GetAccountRateLimitsResponse { + serde_json::from_value(json!({ + "accountId":"workspace-a", "rateLimitUpsell":{ + "banner_type":"selected_model_limit", "model_slug":"test-model-a", "presentation":"inline", + "title":"Selected model usage exhausted", "description":"Switch to another model or contact your owner.", + "ctas":[{"action":"notify_owner","label":"Notify owner"}] + }, + "rateLimits":{}, "rateLimitsByLimitId":null,"rateLimitResetCredits":null + })).unwrap() +} + +async fn next_rate_limits_loaded( + events: &mut tokio::sync::mpsc::UnboundedReceiver, +) -> Result { + Ok( + tokio::time::timeout(std::time::Duration::from_secs(/*secs*/ 10), async { + loop { + let event = events.recv().await.expect("app event channel"); + if matches!(event, AppEvent::RateLimitsLoaded { .. }) { + break event; + } + } + }) + .await?, + ) +} + +#[tokio::test] +async fn backend_banner_limit_error_refreshes_again_after_intervening_rolling_hard_stop() +-> Result<()> { + let server = MockServer::start().await; + let home = tempdir()?; + write_chatgpt_auth( + home.path(), + ChatGptAuthFixture::new("local-test-token") + .account_id("workspace-a") + .chatgpt_user_id("user-a") + .plan_type("team"), + AuthCredentialsStoreMode::File, + ) + .expect("write synthetic auth"); + std::fs::write( + home.path().join("config.toml"), + format!( + "chatgpt_base_url = {:?}\ncli_auth_credentials_store = \"file\"\n", + server.uri() + ), + )?; + let (mut app, mut events, _ops) = make_test_app_with_channels().await; + app.config.codex_home = home.path().to_path_buf().abs(); + app.config.chatgpt_base_url = server.uri(); + app.config.sqlite = codex_state::SqliteConfig::new_for_testing(home.path().abs()); + set_chatgpt_auth(&mut app.chat_widget); + app.chat_widget.set_model("test-model-a"); + let mut healthy = response_with_banner(); + healthy.rate_limit_upsell = None; + app.chat_widget.update_backend_banner(&healthy); + assert!( + !render_bottom_popup(&app.chat_widget, /*width*/ 90) + .contains("Selected model usage exhausted") + ); + Mock::given(method("GET")) + .and(path("/api/codex/usage")) + .respond_with( + ResponseTemplate::new(200) + .set_delay(std::time::Duration::from_millis(/*millis*/ 100)) + .set_body_json(json!({ + "account_id":"workspace-a","user_id":"user-a","plan_type":"team", + "rate_limit":{"allowed":true,"limit_reached":false}, + "rate_limit_upsell":response_with_banner().rate_limit_upsell, + "rate_limit_reset_credits":{"available_count":0} + })), + ) + .expect(3) + .mount(&server) + .await; + Mock::given(method("GET")) + .and(path("/api/codex/rate-limit-reset-credits")) + .respond_with( + ResponseTemplate::new(200).set_body_json(json!({"available_count":0,"credits":[]})), + ) + .expect(3) + .mount(&server) + .await; + let mut session = Box::pin(crate::start_embedded_app_server_for_picker(&app.config)).await?; + let mut tui = crate::tui::test_support::make_test_tui()?; + while events.try_recv().is_ok() {} + app.chat_widget.handle_server_notification( + ServerNotification::Error(ErrorNotification { + error: AppServerTurnError { + misalignment: None, + message: "credits exhausted".into(), + codex_error_info: Some(CodexErrorInfo::UsageLimitExceeded), + additional_details: None, + }, + will_retry: false, + thread_id: "thread-a".into(), + turn_id: "turn-a".into(), + }), + /*replay_kind*/ None, + ); + let recovery = loop { + let event = events + .try_recv() + .expect("limit error should request recovery without a command"); + if matches!( + event, + AppEvent::RefreshRateLimits { + origin: RateLimitRefreshOrigin::Recovery + } + ) { + break event; + } + }; + app.handle_event(&mut tui, &mut session, recovery).await?; + app.handle_event( + &mut tui, + &mut session, + AppEvent::RefreshRateLimits { + origin: RateLimitRefreshOrigin::Recovery, + }, + ) + .await?; + let mut rolling = response_with_banner().rate_limits; + rolling.rate_limit_reached_type = + Some(codex_app_server_protocol::RateLimitReachedType::WorkspaceMemberCreditsDepleted); + app.handle_app_server_event( + &session, + codex_app_server_client::AppServerEvent::ServerNotification(Box::new( + ServerNotification::AccountRateLimitsUpdated( + codex_app_server_protocol::AccountRateLimitsUpdatedNotification { + rate_limits: rolling.clone(), + }, + ), + )), + ) + .await; + let loaded = next_rate_limits_loaded(&mut events).await?; + assert!( + matches!(&loaded, AppEvent::RateLimitsLoaded { result: Ok(_), .. }), + "{loaded:?}" + ); + app.handle_event(&mut tui, &mut session, loaded).await?; + assert!( + !render_bottom_popup(&app.chat_widget, /*width*/ 90) + .contains("Selected model usage exhausted") + ); + // No second inference Error or explicit refresh: the obsolete read starts its own replacement. + let loaded = next_rate_limits_loaded(&mut events).await?; + app.handle_event(&mut tui, &mut session, loaded).await?; + let rendered = render_bottom_popup(&app.chat_widget, /*width*/ 90); + assert!(rendered.contains("Selected model usage exhausted")); + assert!(rendered.contains("Notify owner")); + // A background operation can report the same hard stop after the full response omitted + // aggregate reached_type: included usage for other models is still available. + app.handle_app_server_event( + &session, + codex_app_server_client::AppServerEvent::ServerNotification(Box::new( + ServerNotification::AccountRateLimitsUpdated( + codex_app_server_protocol::AccountRateLimitsUpdatedNotification { + rate_limits: rolling, + }, + ), + )), + ) + .await; + assert!( + render_bottom_popup(&app.chat_widget, /*width*/ 90) + .contains("Selected model usage exhausted") + ); + let loaded = next_rate_limits_loaded(&mut events).await?; + app.handle_event(&mut tui, &mut session, loaded).await?; + assert!( + render_bottom_popup(&app.chat_widget, /*width*/ 90) + .contains("Selected model usage exhausted") + ); + app.chat_widget.set_model("test-model-b"); + assert!( + !render_bottom_popup(&app.chat_widget, /*width*/ 90) + .contains("Selected model usage exhausted") + ); + session.shutdown().await?; + server.verify().await; + Ok(()) +} + +#[test] +fn backend_banner_recovery_follows_rolling_invalidation_without_another_error() { + let mut refresh = crate::app::rate_limit_refresh::RateLimitRefreshState::default(); + let mut epoch = 0; + let first = refresh + .start(RateLimitRefreshOrigin::Recovery, &mut epoch) + .unwrap(); + epoch += 1; + assert_eq!( + refresh.finish(first.0, first.1, epoch, RateLimitReadStatus::Succeeded), + RateLimitRefreshOutcome::RefreshRecovery + ); +} + +#[tokio::test] +async fn backend_banner_rolling_only_recovery_holds_new_input() -> Result<()> { + let (mut app, _events, mut ops) = make_test_app_with_channels().await; + let mut session = Box::pin(crate::start_embedded_app_server_for_picker(&app.config)).await?; + let mut tui = crate::tui::test_support::make_test_tui()?; + app.chat_widget.handle_thread_session(test_thread_session( + ThreadId::new(), + app.config.cwd.to_path_buf(), + )); + set_chatgpt_auth(&mut app.chat_widget); + app.chat_widget.set_model("test-model-a"); + let mut rolling = response_with_banner().rate_limits; + rolling.spend_control_reached = Some(true); + app.handle_app_server_event( + &session, + codex_app_server_client::AppServerEvent::ServerNotification(Box::new( + ServerNotification::AccountRateLimitsUpdated( + codex_app_server_protocol::AccountRateLimitsUpdatedNotification { + rate_limits: rolling, + }, + ), + )), + ) + .await; + app.chat_widget.apply_external_edit("follow-up".into()); + app.chat_widget + .handle_key_event(KeyEvent::new(KeyCode::Enter, KeyModifiers::NONE)); + assert_eq!( + app.chat_widget.queued_user_message_texts(), + vec!["follow-up"] + ); + assert!( + !std::iter::from_fn(|| ops.try_recv().ok()).any(|op| matches!(op, Op::UserTurn { .. })) + ); + app.handle_event( + &mut tui, + &mut session, + AppEvent::RateLimitsLoaded { + request_id: 1, + origin: RateLimitRefreshOrigin::Recovery, + hard_stop_generation: app.rate_limit_hard_stop_generation, + result: Ok(response_with_banner()), + }, + ) + .await?; + assert!( + matches!(next_user_turn_op(&mut ops), Op::UserTurn { items, .. } + if items == vec![UserInput::Text { text: "follow-up".into(), text_elements: Vec::new() }]) + ); + session.shutdown().await?; + Ok(()) +} + +#[tokio::test] +async fn backend_banner_account_changes_invalidate_pending_recovery() -> Result<()> { + let (mut app, _events, _ops) = make_test_app_with_channels().await; + let mut session = Box::pin(crate::start_embedded_app_server_for_picker(&app.config)).await?; + let mut tui = crate::tui::test_support::make_test_tui()?; + app.chat_widget.set_model("test-model-a"); + let current = response_with_banner(); + app.chat_widget.update_backend_banner(¤t); + assert!( + render_bottom_popup(&app.chat_widget, /*width*/ 90) + .contains("Selected model usage exhausted") + ); + let pending = app + .rate_limit_refresh_state + .start( + RateLimitRefreshOrigin::Recovery, + &mut app.rate_limit_hard_stop_generation, + ) + .unwrap(); + app.handle_app_server_event( + &session, + codex_app_server_client::AppServerEvent::ServerNotification(Box::new( + ServerNotification::AccountUpdated( + codex_app_server_protocol::AccountUpdatedNotification { + auth_mode: None, + plan_type: None, + }, + ), + )), + ) + .await; + app.handle_event( + &mut tui, + &mut session, + AppEvent::RateLimitsLoaded { + request_id: pending.0, + origin: RateLimitRefreshOrigin::Recovery, + hard_stop_generation: pending.1, + result: Ok(current), + }, + ) + .await?; + assert!( + !render_bottom_popup(&app.chat_widget, /*width*/ 90) + .contains("Selected model usage exhausted") + ); + assert!( + app.rate_limit_refresh_state + .start( + RateLimitRefreshOrigin::Recovery, + &mut app.rate_limit_hard_stop_generation + ) + .is_some() + ); + session.shutdown().await?; + Ok(()) +} + +#[tokio::test] +async fn backend_banner_reset_redemption_rejects_pre_reset_content() -> Result<()> { + let (mut app, _events, mut ops) = make_test_app_with_channels().await; + let mut session = Box::pin(crate::start_embedded_app_server_for_picker(&app.config)).await?; + let mut tui = crate::tui::test_support::make_test_tui()?; + app.chat_widget.handle_thread_session(test_thread_session( + ThreadId::new(), + app.config.cwd.to_path_buf(), + )); + app.chat_widget.set_model("test-model-a"); + let banner = response_with_banner(); + app.chat_widget.update_backend_banner(&banner); + assert!( + render_bottom_popup(&app.chat_widget, /*width*/ 90) + .contains("Selected model usage exhausted") + ); + let pending = app + .rate_limit_refresh_state + .start( + RateLimitRefreshOrigin::Recovery, + &mut app.rate_limit_hard_stop_generation, + ) + .unwrap(); + app.chat_widget.hold_rate_limit_recovery(); + app.chat_widget.apply_external_edit("after reset".into()); + app.chat_widget + .handle_key_event(KeyEvent::new(KeyCode::Enter, KeyModifiers::NONE)); + assert_eq!( + app.chat_widget.queued_user_message_texts(), + vec!["after reset"] + ); + let request_id = app.chat_widget.show_rate_limit_reset_consuming_popup(); + app.handle_event( + &mut tui, + &mut session, + AppEvent::RateLimitResetCreditConsumed { + request_id, + idempotency_key: "mock-reset".into(), + credit_id: None, + result: Ok( + codex_app_server_protocol::ConsumeAccountRateLimitResetCreditResponse { + outcome: + codex_app_server_protocol::ConsumeAccountRateLimitResetCreditOutcome::Reset, + }, + ), + }, + ) + .await?; + let mut recovered = banner.clone(); + recovered.rate_limit_upsell = None; + recovered.rate_limit_reset_credits = + Some(codex_app_server_protocol::RateLimitResetCreditsSummary { + available_count: 0, + credits: None, + }); + app.handle_event( + &mut tui, + &mut session, + AppEvent::RateLimitsLoaded { + request_id: 2, + origin: RateLimitRefreshOrigin::ResetConsume { request_id }, + hard_stop_generation: app.rate_limit_hard_stop_generation, + result: Ok(recovered), + }, + ) + .await?; + assert!( + matches!(next_user_turn_op(&mut ops), Op::UserTurn { items, .. } + if items == vec![UserInput::Text { text: "after reset".into(), text_elements: Vec::new() }]) + ); + app.chat_widget + .handle_key_event(KeyEvent::new(KeyCode::Esc, KeyModifiers::NONE)); + app.handle_event( + &mut tui, + &mut session, + AppEvent::RateLimitsLoaded { + request_id: pending.0, + origin: RateLimitRefreshOrigin::Recovery, + hard_stop_generation: pending.1, + result: Ok(banner), + }, + ) + .await?; + assert!( + !render_bottom_popup(&app.chat_widget, /*width*/ 90) + .contains("Selected model usage exhausted") + ); + assert!( + app.rate_limit_refresh_state + .start( + RateLimitRefreshOrigin::Recovery, + &mut app.rate_limit_hard_stop_generation + ) + .is_some() + ); + session.shutdown().await?; + Ok(()) +} + +#[test] +fn backend_banner_post_reset_read_preserves_newer_recovery_hold() { + let mut refresh = crate::app::rate_limit_refresh::RateLimitRefreshState::default(); + let mut epoch = 0; + let old = refresh + .start(RateLimitRefreshOrigin::Recovery, &mut epoch) + .unwrap(); + epoch += 1; + refresh.invalidate_recovery(); + let reset = refresh + .start( + RateLimitRefreshOrigin::ResetConsume { request_id: 1 }, + &mut epoch, + ) + .unwrap(); + assert_eq!( + refresh.finish(old.0, old.1, epoch, RateLimitReadStatus::Succeeded), + RateLimitRefreshOutcome::Ignore + ); + assert!(refresh.has_pending_recovery()); + let newer = refresh + .start(RateLimitRefreshOrigin::Recovery, &mut epoch) + .unwrap(); + assert_eq!( + refresh.finish(reset.0, reset.1, epoch, RateLimitReadStatus::Succeeded), + RateLimitRefreshOutcome::Ignore + ); + assert!(refresh.has_pending_recovery()); + assert_eq!( + refresh.finish(newer.0, newer.1, epoch, RateLimitReadStatus::Failed), + RateLimitRefreshOutcome::Ignore + ); + assert!(!refresh.has_pending_recovery()); +} + +#[test] +fn backend_banner_recovery_coalesces_until_newer_epoch_can_be_read() { + let mut refresh = crate::app::rate_limit_refresh::RateLimitRefreshState::default(); + let mut epoch = 0; + let first = refresh + .start(RateLimitRefreshOrigin::Recovery, &mut epoch) + .unwrap(); + epoch += 1; // A newer rolling hard stop makes the in-flight response obsolete. + for _ in 0..10 { + assert_eq!( + refresh.start(RateLimitRefreshOrigin::Recovery, &mut epoch), + None + ); + } + assert_eq!( + refresh.finish(first.0, first.1, epoch, RateLimitReadStatus::Succeeded), + RateLimitRefreshOutcome::RefreshRecovery + ); + let next = refresh + .start(RateLimitRefreshOrigin::Recovery, &mut epoch) + .unwrap(); + assert_eq!( + refresh.finish(next.0, next.1, epoch, RateLimitReadStatus::Succeeded), + RateLimitRefreshOutcome::Apply + ); +} diff --git a/codex-rs/tui/src/app/tests/backend_banner_startup_tests.rs b/codex-rs/tui/src/app/tests/backend_banner_startup_tests.rs new file mode 100644 index 0000000000..47cc5ce572 --- /dev/null +++ b/codex-rs/tui/src/app/tests/backend_banner_startup_tests.rs @@ -0,0 +1,94 @@ +use super::backend_banner_fallback_tests::fallback_response; +use super::*; +use crate::chatwidget::UserMessage; +use pretty_assertions::assert_eq; + +#[tokio::test] +async fn backend_banner_fallback_applies_before_initial_and_queued_startup_prompts() -> Result<()> { + let (mut app, mut events, _ops) = make_test_app_with_channels().await; + let mut config = app.config.clone(); + config.model = Some("gpt-5.4".into()); + let mut tui = crate::tui::test_support::make_test_tui()?; + let init = app.chatwidget_init_for_forked_or_resumed_thread( + &mut tui, + config.clone(), + Some(UserMessage::from("initial prompt")), + ); + app.replace_chat_widget(ChatWidget::new_with_app_event(init)); + set_chatgpt_auth(&mut app.chat_widget); + set_fast_mode_test_catalog(&mut app.chat_widget); + app.model_catalog = app.chat_widget.model_catalog(); + app.pending_startup_thread_start = true; + app.chat_widget.set_model("gpt-5.4"); + app.chat_widget + .set_queue_submissions_until_session_configured(/*queue*/ true); + app.chat_widget + .apply_external_edit("queued follow-up".into()); + app.chat_widget + .handle_key_event(KeyEvent::new(KeyCode::Enter, KeyModifiers::NONE)); + let (mut server, requests, proxy) = session_lifecycle_requests::start_recording_app_server( + &config, /*blocked_thread_list*/ None, /*failed_thread_name*/ None, + ) + .await?; + let generation = app.rate_limit_hard_stop_generation; + app.handle_event( + &mut tui, + &mut server, + AppEvent::RateLimitsLoaded { + request_id: 1, + origin: RateLimitRefreshOrigin::StartupPrefetch { + reset_hint_request_id: 0, + }, + hard_stop_generation: generation, + result: Ok(fallback_response()), + }, + ) + .await?; + assert!(requests.lock().unwrap().is_empty()); + assert!( + !render_bottom_popup(&app.chat_widget, /*width*/ 72) + .contains("Selected model usage exhausted") + ); + let started = server.start_thread(&config).await?; + let thread_id = started.session.thread_id; + requests.lock().unwrap().clear(); + while events.try_recv().is_ok() {} + app.handle_startup_thread_started(&mut server, Ok(started)) + .await?; + assert_eq!(app.active_thread_id, Some(thread_id)); + let submissions = std::iter::from_fn(|| events.try_recv().ok()) + .filter_map(|event| { + if let AppEvent::CodexOp(AppCommand::UserTurn { model, items, .. }) = event { + Some((model, items)) + } else { + None + } + }) + .collect::>(); + assert_eq!( + submissions, + vec![( + "gpt-5.2".into(), + vec![UserInput::Text { + text: "initial prompt".into(), + text_elements: Vec::new(), + }] + )] + ); + assert_eq!( + app.chat_widget.queued_user_message_texts(), + vec!["queued follow-up"] + ); + assert_eq!( + requests + .lock() + .unwrap() + .iter() + .map(|request| request.method.as_str()) + .collect::>(), + vec!["thread/settings/update"] + ); + server.shutdown().await?; + proxy.await??; + Ok(()) +} diff --git a/codex-rs/tui/src/app/tests/rate_limits.rs b/codex-rs/tui/src/app/tests/rate_limits.rs index 13b4fe7617..171c6d9eef 100644 --- a/codex-rs/tui/src/app/tests/rate_limits.rs +++ b/codex-rs/tui/src/app/tests/rate_limits.rs @@ -40,6 +40,8 @@ fn rate_limit_snapshot( fn account_rate_limits_response(snapshot: RateLimitSnapshot) -> GetAccountRateLimitsResponse { GetAccountRateLimitsResponse { + account_id: None, + rate_limit_upsell: None, rate_limits: snapshot, rate_limits_by_limit_id: None, rate_limit_reset_credits: Some(RateLimitResetCreditsSummary { @@ -101,6 +103,50 @@ fn deliver_usage_limit_error(app: &mut App) { ); } +#[tokio::test] +async fn backend_banner_state_survives_widget_replacement() -> Result<()> { + for dismiss in [false, true] { + let (mut app, _rx, _op_rx) = make_test_app_with_channels().await; + set_chatgpt_auth(&mut app.chat_widget); + let mut response = account_rate_limits_response(rate_limit_snapshot( + /*used_percent*/ 100, /*rate_limit_reached_type*/ None, + /*spend_control_reached*/ None, + )); + response.rate_limit_upsell = Some(serde_json::json!({ + "banner_type": "plus_rate_limit_reached", "title": "Usage limit reached", + "presentation": "dismissible", + "description": "Choose how to continue.", + "ctas": [{"action": "view_usage", "label": "View usage"}] + })); + app.chat_widget.update_backend_banner(&response); + assert!(render_bottom_popup(&app.chat_widget, /*width*/ 90).contains("View usage")); + if dismiss { + app.chat_widget + .handle_key_event(KeyEvent::new(KeyCode::Esc, KeyModifiers::NONE)); + } + let before = render_bottom_popup(&app.chat_widget, /*width*/ 90); + let mut tui = crate::tui::test_support::make_test_tui()?; + let init = app.chatwidget_init_for_forked_or_resumed_thread( + &mut tui, + app.config.clone(), + /*initial_user_message*/ None, + ); + app.replace_chat_widget(ChatWidget::new_with_app_event(init)); + set_active_cell( + &mut app.chat_widget, + Box::new(PlainHistoryCell::new(Vec::new())), + ); + app.chat_widget.pre_draw_tick(); + assert_eq!(render_bottom_popup(&app.chat_widget, /*width*/ 90), before); + app.chat_widget.update_backend_banner(&response); + assert_eq!(render_bottom_popup(&app.chat_widget, /*width*/ 90), before); + response.rate_limit_upsell = None; + app.chat_widget.update_backend_banner(&response); + assert!(!render_bottom_popup(&app.chat_widget, /*width*/ 90).contains("View usage")); + } + Ok(()) +} + #[tokio::test] async fn rolling_workspace_hard_stops_invalidate_older_rate_limit_reads() -> Result<()> { let (mut app, _app_event_rx, _op_rx) = make_test_app_with_channels().await; @@ -234,6 +280,7 @@ async fn stale_rate_limit_reads_preserve_newer_workspace_hard_stop_for_every_ori &mut tui, &mut app_server, AppEvent::RateLimitsLoaded { + request_id: 0, origin, hard_stop_generation: read_generation, result: Ok(account_rate_limits_response(rate_limit_snapshot( @@ -313,6 +360,7 @@ async fn stale_rate_limit_read_does_not_dismiss_visible_workspace_advisory() -> &mut tui, &mut app_server, AppEvent::RateLimitsLoaded { + request_id: 0, origin: RateLimitRefreshOrigin::StatusCommand { request_id }, hard_stop_generation: read_generation, result: Ok(account_rate_limits_response(rate_limit_snapshot( @@ -359,6 +407,7 @@ async fn post_hard_stop_rate_limit_read_clears_recovered_workspace_limit() -> Re &mut tui, &mut app_server, AppEvent::RateLimitsLoaded { + request_id: 0, origin: RateLimitRefreshOrigin::StatusCommand { request_id }, hard_stop_generation: read_generation, result: Ok(account_rate_limits_response(rate_limit_snapshot( @@ -386,3 +435,113 @@ async fn post_hard_stop_rate_limit_read_clears_recovered_workspace_limit() -> Re app_server.shutdown().await?; Ok(()) } + +#[tokio::test] +async fn failed_rate_limit_read_preserves_visible_backend_banner() -> Result<()> { + let (mut app, _events, _ops) = make_test_app_with_channels().await; + let mut tui = crate::tui::test_support::make_test_tui()?; + let mut app_server = Box::pin(crate::start_embedded_app_server_for_picker( + app.chat_widget.config_ref(), + )) + .await?; + let mut response = account_rate_limits_response(rate_limit_snapshot( + /*used_percent*/ 25, + /*rate_limit_reached_type*/ None, + Some(false), + )); + response.account_id = Some("workspace-a".into()); + response.rate_limit_upsell = Some(serde_json::json!({ + "banner_type": "workspace_recovery", "presentation": "inline", + "title": "Workspace needs credits", "description": "Ask your owner for credits.", + "ctas": [] + })); + app.chat_widget.update_backend_banner(&response); + let before = render_bottom_popup(&app.chat_widget, /*width*/ 90); + assert!(before.contains("Workspace needs credits")); + let request_id = 7; + app.chat_widget + .add_status_output(/*refreshing_rate_limits*/ true, Some(request_id)); + let generation = app.rate_limit_hard_stop_generation; + app.handle_event( + &mut tui, + &mut app_server, + AppEvent::RateLimitsLoaded { + request_id: 0, + origin: RateLimitRefreshOrigin::StatusCommand { request_id }, + hard_stop_generation: generation, + result: Err("transient test failure".into()), + }, + ) + .await?; + assert_eq!(render_bottom_popup(&app.chat_widget, /*width*/ 90), before); + app_server.shutdown().await?; + Ok(()) +} + +#[tokio::test] +async fn backend_banner_reads_ignore_older_completions() -> Result<()> { + let (mut app, _events, _ops) = make_test_app_with_channels().await; + let mut session = Box::pin(crate::start_embedded_app_server_for_picker(&app.config)).await?; + let mut tui = crate::tui::test_support::make_test_tui()?; + app.chat_widget.set_model("test-model-a"); + let mut current = account_rate_limits_response(rate_limit_snapshot( + /*used_percent*/ 100, /*rate_limit_reached_type*/ None, + /*spend_control_reached*/ None, + )); + current.rate_limit_upsell = Some(serde_json::json!({ + "banner_type":"selected_model_limit", "model_slug":"test-model-a", "presentation":"inline", + "title":"Selected model usage exhausted", "description":"Contact your owner.", "ctas":[] + })); + for request_id in 1..=5 { + app.rate_limit_refresh_state + .start( + RateLimitRefreshOrigin::StatusCommand { request_id }, + &mut app.rate_limit_hard_stop_generation, + ) + .unwrap(); + } + for (id, generation, result, expect_visible) in [ + (2, 0, Ok(current.clone()), true), + ( + 1, + 0, + Ok({ + let mut absent = current.clone(); + absent.rate_limit_upsell = None; + absent + }), + true, + ), + (4, 0, Err("transient failure".into()), true), + ( + 3, + 0, + Ok({ + let mut absent = current.clone(); + absent.rate_limit_upsell = None; + absent + }), + false, + ), + (5, 0, Ok(current.clone()), true), + ] { + app.handle_event( + &mut tui, + &mut session, + AppEvent::RateLimitsLoaded { + request_id: id, + origin: RateLimitRefreshOrigin::StatusCommand { request_id: id }, + hard_stop_generation: generation, + result, + }, + ) + .await?; + assert_eq!( + render_bottom_popup(&app.chat_widget, /*width*/ 90) + .contains("Selected model usage exhausted"), + expect_visible + ); + } + session.shutdown().await?; + Ok(()) +} diff --git a/codex-rs/tui/src/app/tests/snapshots/codex_tui__app__tests__backend_banner_fallback_tests__backend_banner_after_fallback.snap b/codex-rs/tui/src/app/tests/snapshots/codex_tui__app__tests__backend_banner_fallback_tests__backend_banner_after_fallback.snap new file mode 100644 index 0000000000..a39f4fd236 --- /dev/null +++ b/codex-rs/tui/src/app/tests/snapshots/codex_tui__app__tests__backend_banner_fallback_tests__backend_banner_after_fallback.snap @@ -0,0 +1,15 @@ +--- +source: tui/src/app/tests/backend_banner_fallback_tests.rs +assertion_line: 76 +expression: rendered +--- + Selected model usage exhausted + Add credits to use this model again. + +› 1. View usage + + Press a number to choose · esc to dismiss · type to continue + +› Ask Codex to do anything + + gpt-5.2 medium · /tmp/project diff --git a/codex-rs/tui/src/app/tests/snapshots/codex_tui__app__tests__backend_banner_fallback_tests__backend_banner_fallback_notice.snap b/codex-rs/tui/src/app/tests/snapshots/codex_tui__app__tests__backend_banner_fallback_tests__backend_banner_fallback_notice.snap new file mode 100644 index 0000000000..da8d0ecb7b --- /dev/null +++ b/codex-rs/tui/src/app/tests/snapshots/codex_tui__app__tests__backend_banner_fallback_tests__backend_banner_fallback_notice.snap @@ -0,0 +1,6 @@ +--- +source: tui/src/app/tests/backend_banner_fallback_tests.rs +assertion_line: 124 +expression: "notices[0]" +--- +• Automatically switched to gpt-5.2 medium due to usage limits. diff --git a/codex-rs/tui/src/app/tests/snapshots/codex_tui__app__tests__backend_banner_fallback_tests__backend_banner_fallback_unavailable.snap b/codex-rs/tui/src/app/tests/snapshots/codex_tui__app__tests__backend_banner_fallback_tests__backend_banner_fallback_unavailable.snap new file mode 100644 index 0000000000..b90f77cb51 --- /dev/null +++ b/codex-rs/tui/src/app/tests/snapshots/codex_tui__app__tests__backend_banner_fallback_tests__backend_banner_fallback_unavailable.snap @@ -0,0 +1,8 @@ +--- +source: tui/src/app/tests/backend_banner_fallback_tests.rs +assertion_line: 234 +expression: rendered +--- +› Ask Codex to do anything + + gpt-5.4 default · /tmp/project diff --git a/codex-rs/tui/src/app_event.rs b/codex-rs/tui/src/app_event.rs index 23d7928cfe..bb5b57aa3d 100644 --- a/codex-rs/tui/src/app_event.rs +++ b/codex-rs/tui/src/app_event.rs @@ -173,6 +173,8 @@ pub(crate) enum RateLimitRefreshOrigin { ResetPicker { request_id: u64 }, /// Refresh requested after a reset credit was successfully consumed. ResetConsume { request_id: u64 }, + /// Refresh backend recovery after an inference limit error. + Recovery, } #[derive(Debug, Clone, PartialEq, Eq)] @@ -524,6 +526,7 @@ pub(crate) enum AppEvent { /// Result of refreshing rate limits. RateLimitsLoaded { + request_id: u64, origin: RateLimitRefreshOrigin, hard_stop_generation: u64, result: Result, @@ -601,6 +604,7 @@ pub(crate) enum AppEvent { /// Result of notifying the workspace owner. AddCreditsNudgeEmailFinished { + request_id: Uuid, result: Result, }, diff --git a/codex-rs/tui/src/app_server_session.rs b/codex-rs/tui/src/app_server_session.rs index c7908ca637..4bd7a56ef9 100644 --- a/codex-rs/tui/src/app_server_session.rs +++ b/codex-rs/tui/src/app_server_session.rs @@ -2461,6 +2461,8 @@ mod tests { #[test] fn app_server_rate_limit_snapshots_deduplicates_top_level_limit_from_map() { let response = GetAccountRateLimitsResponse { + account_id: None, + rate_limit_upsell: None, rate_limits: rate_limit_snapshot("codex"), rate_limits_by_limit_id: Some(HashMap::from([ ("codex".to_string(), rate_limit_snapshot("codex")), diff --git a/codex-rs/tui/src/backend_banners.rs b/codex-rs/tui/src/backend_banners.rs new file mode 100644 index 0000000000..18c3a17c4f --- /dev/null +++ b/codex-rs/tui/src/backend_banners.rs @@ -0,0 +1,74 @@ +//! Backend banner payload and CTA mapping, supplied by the existing account usage read. +//! +//! The backend owns eligibility, copy, actions, and ordered model fallback instructions. + +use codex_protocol::account::PlanType; +use serde::Deserialize; + +mod actions; +mod render; + +#[cfg(test)] +#[path = "backend_banners_tests.rs"] +mod tests; + +#[derive(Clone, Debug, Deserialize, PartialEq, Eq)] +pub(crate) struct BackendBanner { + pub(crate) banner_type: String, + pub(crate) title: String, + pub(crate) description: String, + pub(crate) ctas: Vec, + pub(crate) reset_at: Option, + pub(crate) model_slug: Option, + pub(crate) blocked_model_slug: Option, + #[serde(default)] + pub(crate) fallback_model_slugs: Vec, + #[serde(default)] + pub(crate) presentation: BannerPresentation, + request_url: Option, + #[serde(skip)] + pub(crate) account_id: String, + #[serde(skip)] + pub(crate) plan_type: Option, +} + +#[derive(Clone, Debug, Default, Deserialize, PartialEq, Eq)] +#[serde(rename_all = "snake_case")] +pub(crate) enum BannerPresentation { + #[default] + Inline, + Dismissible, +} + +#[derive(Clone, Debug, Deserialize, PartialEq, Eq)] +pub(crate) struct BackendBannerCta { + action: String, + label: String, +} + +impl BackendBanner { + /// Parse supported, bounded content before constructing rendered copy or CTA closures. + pub(crate) fn parse(raw: &serde_json::Value) -> Option { + serde_json::from_value::(raw.clone()) + .ok() + .filter(|banner| { + let valid_slug = |slug: &str| { + !slug.trim().is_empty() + && slug.len() <= 256 + && !slug.chars().any(char::is_control) + }; + banner.title.len() <= 1024 + && banner.description.len() <= 4096 + && banner.ctas.len() <= 8 + && !banner.title.trim().is_empty() + && banner.title.lines().count() <= 3 + && banner.description.lines().count() <= 12 + && banner.blocked_model_slug.as_deref().is_none_or(valid_slug) + && banner.fallback_model_slugs.len() <= 16 + && banner + .fallback_model_slugs + .iter() + .all(|slug| valid_slug(slug)) + }) + } +} diff --git a/codex-rs/tui/src/backend_banners/actions.rs b/codex-rs/tui/src/backend_banners/actions.rs new file mode 100644 index 0000000000..0b3d99968e --- /dev/null +++ b/codex-rs/tui/src/backend_banners/actions.rs @@ -0,0 +1,87 @@ +//! Map backend CTA names to existing CLI actions and desktop-equivalent browser destinations. + +use super::BackendBanner; +use codex_app_server_protocol::AddCreditsNudgeCreditType; +use codex_protocol::account::PlanType; + +const USAGE_URL: &str = "https://chatgpt.com/codex/settings/usage"; +const WORKSPACE_USAGE_URL: &str = "https://chatgpt.com/admin/usage-limits/workspace"; + +pub(super) enum BannerAction { + OpenUrl(String), + NotifyOwner(AddCreditsNudgeCreditType), + ResetUsage, +} + +impl BackendBanner { + pub(super) fn resolve_action(&self, action: &str) -> Option { + match action { + "notify_owner" | "contact_owner" => { + return Some(BannerAction::NotifyOwner( + AddCreditsNudgeCreditType::Credits, + )); + } + "request_increase" => { + let Some(destination) = self.request_url.as_deref() else { + return Some(BannerAction::NotifyOwner( + AddCreditsNudgeCreditType::UsageLimit, + )); + }; + let url = url::Url::parse(destination).ok()?; + if !matches!(url.scheme(), "https" | "http") + || url.host_str().is_none() + || !url.username().is_empty() + || url.password().is_some() + { + return None; + } + return Some(BannerAction::OpenUrl(url.to_string())); + } + // Keep the existing picker and explicit confirmation before consuming a reset. + "reset_usage" => return Some(BannerAction::ResetUsage), + _ => {} + } + let destination = match action { + "add_credits" | "buy_credits" + if self.plan_type.is_some_and(PlanType::is_workspace_account) => + { + "https://chatgpt.com/admin/billing?codex_credit_action=add_credits".to_string() + } + "add_credits" | "buy_credits" => format!("{USAGE_URL}?credits_modal=true"), + "buy_reset" => "https://chatgpt.com/codex/purchase/reset".to_string(), + "view_usage" | "request_increase_usage_settings" => USAGE_URL.to_string(), + "view_workspace_usage" | "increase_spend_cap" => WORKSPACE_USAGE_URL.to_string(), + "open_plus_pricing_web" => "https://chatgpt.com/explore/plus".to_string(), + "open_pro_pricing_web" => "https://chatgpt.com/explore/pro".to_string(), + "open_pricing_dialog" => { + let mut url = url::Url::parse("https://chatgpt.com/").ok()?; + let target = if matches!(self.plan_type, Some(PlanType::Plus | PlanType::ProLite)) { + "pro" + } else { + "plus" + }; + url.query_pairs_mut() + .append_pair("cta_tab", "personal") + .append_pair("highlight_plan", target); + if self.plan_type == Some(PlanType::ProLite) { + url.query_pairs_mut().append_pair("pro_variant", "2x"); + } + url.set_fragment(Some("pricing")); + url.to_string() + } + // Desktop-only referral and Premium dialogs need their own CLI flow. + _ => return None, + }; + let mut destination = url::Url::parse(&destination).ok()?; + if destination.path().starts_with("/admin/") { + if self.account_id.is_empty() { + return None; + } + // The existing admin route selects the requested workspace before opening the modal. + destination + .query_pairs_mut() + .append_pair("account_id", &self.account_id); + } + Some(BannerAction::OpenUrl(destination.to_string())) + } +} diff --git a/codex-rs/tui/src/backend_banners/render.rs b/codex-rs/tui/src/backend_banners/render.rs new file mode 100644 index 0000000000..e4eeeb3e50 --- /dev/null +++ b/codex-rs/tui/src/backend_banners/render.rs @@ -0,0 +1,74 @@ +//! Render backend-owned copy and ordered CTA labels with the shared inline banner UI. + +use super::BackendBanner; +use super::BannerPresentation; +use super::actions::BannerAction; +use crate::app_event::AppEvent; +use crate::bottom_pane::ActionableBanner; +use crate::bottom_pane::BannerDismissal; +use crate::bottom_pane::SelectionItem; +use chrono::DateTime; +use chrono::Local; + +impl BackendBanner { + pub(crate) fn actionable_banner(&self) -> ActionableBanner { + let reset_time = self + .reset_at + .and_then(|timestamp| DateTime::from_timestamp(timestamp, /*nsecs*/ 0)) + .map(|time| { + crate::status::format_reset_timestamp(time.with_timezone(&Local), Local::now()) + }); + let copy = |text: &str| { + let text: String = text + .chars() + .filter(|c| !c.is_control() || *c == '\n') + .collect(); + match reset_time.as_deref() { + Some(reset_time) => text.replace("{time}", reset_time), + None => text, + } + }; + let actions = self + .ctas + .iter() + .filter_map(|cta| { + if cta.label.trim().is_empty() + || cta.label.len() > 256 + || cta.label.chars().any(char::is_control) + { + return None; + } + let action = self.resolve_action(&cta.action)?; + Some(SelectionItem { + name: cta.label.clone(), + actions: vec![Box::new(move |tx| { + tx.send(match &action { + BannerAction::OpenUrl(url) => { + AppEvent::OpenUrlInBrowser { url: url.clone() } + } + BannerAction::NotifyOwner(credit_type) => { + AppEvent::SendAddCreditsNudgeEmail { + credit_type: *credit_type, + } + } + BannerAction::ResetUsage => AppEvent::OpenRateLimitResetCredits, + }) + })], + dismiss_on_select: false, + ..Default::default() + }) + }) + .collect::>(); + ActionableBanner { + title: copy(&self.title), + description: copy(&self.description), + actions, + dismissal: if self.presentation == BannerPresentation::Dismissible { + BannerDismissal::Dismissible + } else { + BannerDismissal::Persistent + }, + ..Default::default() + } + } +} diff --git a/codex-rs/tui/src/backend_banners_tests.rs b/codex-rs/tui/src/backend_banners_tests.rs new file mode 100644 index 0000000000..aec08e98a7 --- /dev/null +++ b/codex-rs/tui/src/backend_banners_tests.rs @@ -0,0 +1,57 @@ +use super::BackendBanner; +use pretty_assertions::assert_eq; +use serde_json::json; + +#[test] +fn parse_rejects_more_actions_than_the_inline_banner_can_display() { + let labels: Vec<_> = (1..=8).map(|index| format!("Action {index}")).collect(); + let mut raw = json!({ + "banner_type": "usage_limit", "title": "Usage limit reached", + "description": "Choose how to continue.", + "ctas": labels.iter().map(|label| json!({ + "action": "view_usage", "label": label, + })).collect::>(), + }); + let banner = BackendBanner::parse(&raw).expect("eight actions fit"); + assert_eq!( + banner + .actionable_banner() + .actions + .into_iter() + .map(|action| action.name) + .collect::>(), + labels + ); + + raw["ctas"].as_array_mut().unwrap().push(json!({ + "action": "view_usage", "label": "Hidden ninth action", + })); + assert_eq!(BackendBanner::parse(&raw), None); +} + +#[test] +fn parse_rejects_unsupported_or_unrenderable_content() { + let valid = json!({ + "banner_type": "usage_limit", "title": "Usage limit reached", + "description": "Choose how to continue.", "ctas": [], + }); + for invalid_fields in [ + json!({"presentation":"future_mode"}), + json!({"presentation":null}), + json!({"title":" "}), + json!({"title":"x".repeat(1025)}), + json!({"title":"line\n".repeat(4)}), + json!({"description":"x".repeat(4097)}), + json!({"description":"line\n".repeat(13)}), + json!({"blocked_model_slug":""}), + json!({"blocked_model_slug":"bad\nslug"}), + json!({"fallback_model_slugs":["x".repeat(257)]}), + json!({"fallback_model_slugs":vec!["model"; 17]}), + ] { + let mut raw = valid.clone(); + raw.as_object_mut() + .unwrap() + .extend(invalid_fields.as_object().unwrap().clone()); + assert_eq!(BackendBanner::parse(&raw), None, "{invalid_fields}"); + } +} diff --git a/codex-rs/tui/src/bottom_pane/actionable_banner.rs b/codex-rs/tui/src/bottom_pane/actionable_banner.rs new file mode 100644 index 0000000000..d1e12a6257 --- /dev/null +++ b/codex-rs/tui/src/bottom_pane/actionable_banner.rs @@ -0,0 +1,259 @@ +//! Shared title, description, and CTA content for banners in the TUI bottom pane. +//! +//! Workspace notices and backend banners share the existing selection list for CTA dispatch. +//! The inline wrapper owns presentation and dismissal while preserving normal composer input. + +use super::BottomPane; +use super::BottomPaneView; +use super::SelectionItem; +use super::SelectionViewParams; +use super::list_selection_view::ListSelectionView; +use crate::render::Insets; +use crate::render::RectExt; +use crate::render::renderable::Renderable; +use crate::wrapping::word_wrap_lines; +use crossterm::event::KeyCode; +use crossterm::event::KeyEvent; +use crossterm::event::KeyEventKind; +use crossterm::event::KeyModifiers; +use ratatui::buffer::Buffer; +use ratatui::layout::Rect; +use ratatui::style::Stylize; +use ratatui::text::Line; +use ratatui::widgets::Paragraph; +use ratatui::widgets::Widget; +use std::cell::Cell; + +#[derive(Default)] +pub(crate) struct ActionableBanner { + pub(crate) title: String, + pub(crate) description: String, + pub(crate) actions: Vec, + pub(crate) initial_selected_idx: Option, + pub(crate) dismissal: BannerDismissal, + pub(crate) view_id: Option<&'static str>, +} + +#[derive(Clone, Copy, Default, PartialEq, Eq)] +pub(crate) enum BannerDismissal { + #[default] + Dismissible, + Persistent, +} + +pub(super) struct InlineBanner { + content: InlineBannerContent, + dismissal: BannerDismissal, + shown: Cell, + // Current visibility is separate from whether this banner has ever been shown. + pub(super) visible: Cell, + dismissed: bool, + visible_action_count: Cell, +} + +enum InlineBannerContent { + Actions(Box), + Information { + header: Box, + hint: Line<'static>, + }, +} + +impl Renderable for InlineBanner { + fn render(&self, area: Rect, buf: &mut Buffer) { + self.visible_action_count.set(0); + self.visible.set(!self.dismissed && !area.is_empty()); + if !self.visible.get() { + return; + } + self.shown.set(true); + match &self.content { + InlineBannerContent::Actions(view) => { + view.render(area, buf); + self.visible_action_count.set(view.rendered_item_count()); + } + InlineBannerContent::Information { header, hint } => { + let content = area.inset(Insets::tlbr( + /*top*/ 1, /*left*/ 2, /*bottom*/ 1, /*right*/ 2, + )); + header.render(content, buf); + let y = content + .y + .saturating_add(header.desired_height(content.width) + 1); + if y < area.bottom() { + Renderable::render( + hint, + Rect::new(content.x, y, content.width, /*height*/ 1), + buf, + ); + } + } + } + } + + fn desired_height(&self, width: u16) -> u16 { + if self.dismissed { + return 0; + } + match &self.content { + InlineBannerContent::Actions(view) => view.desired_height(width), + InlineBannerContent::Information { header, hint } => { + header.desired_height(width.saturating_sub(4)) + + if hint.width() == 0 { 2 } else { 4 } + } + } + } +} + +/// Multiline banner copy uses the same word wrapping for measurement and rendering. +struct BannerContent(Vec>); + +impl BannerContent { + fn wrapped_lines(&self, width: u16) -> Vec> { + let mut lines = word_wrap_lines(&self.0, width as usize); + if lines.len() > 8 { + lines.truncate(7); + lines.push("…".dim().into()); + } + lines + } +} + +impl Renderable for BannerContent { + fn render(&self, area: Rect, buf: &mut Buffer) { + let lines = self.wrapped_lines(area.width); + Widget::render(Paragraph::new(lines), area, buf); + } + + fn desired_height(&self, width: u16) -> u16 { + self.wrapped_lines(width).len() as u16 + } +} + +impl From for SelectionViewParams { + fn from(banner: ActionableBanner) -> Self { + let lines = banner + .title + .lines() + .map(|line| Line::from(line.to_owned().bold())) + .chain( + banner + .description + .lines() + .map(|line| Line::from(line.to_owned().dim())), + ) + .collect(); + Self { + view_id: banner.view_id, + header: Box::new(BannerContent(lines)), + items: banner.actions, + initial_selected_idx: banner.initial_selected_idx, + ..Default::default() + } + } +} + +impl BottomPane { + pub(crate) fn show_actionable_banner(&mut self, banner: ActionableBanner) { + self.show_selection_view(banner.into()); + } + + /// Display a banner above the composer without interrupting active dialogs or losing a draft. + pub(crate) fn set_inline_banner(&mut self, banner: Option) { + self.inline_banner = banner.map(|banner| { + let dismissal = banner.dismissal; + let has_actions = !banner.actions.is_empty(); + let mut params: SelectionViewParams = banner.into(); + params.allow_cancel = dismissal == BannerDismissal::Dismissible; + for item in &mut params.items { + item.dismiss_on_select = false; + } + let hint = match (dismissal, has_actions) { + (BannerDismissal::Persistent, true) => "Press a number to choose", + (BannerDismissal::Persistent, false) => "", + (BannerDismissal::Dismissible, true) => { + "Press a number to choose · esc to dismiss · type to continue" + } + (BannerDismissal::Dismissible, false) => "esc to dismiss · type to continue", + }; + let hint: Line<'static> = hint.dim().into(); + params.footer_hint = Some(hint.clone()); + InlineBanner { + content: if has_actions { + InlineBannerContent::Actions(Box::new(ListSelectionView::new( + params, + self.app_event_tx.clone(), + self.keymap.list.clone(), + ))) + } else { + InlineBannerContent::Information { + header: params.header, + hint, + } + }, + dismissal, + shown: Cell::new(false), + visible: Cell::new(false), + dismissed: false, + visible_action_count: Cell::new(0), + } + }); + self.request_redraw(); + } + + /// Observation for the owning controller; model hiding is not a dismissal. + pub(crate) fn inline_banner_lifecycle(&self) -> (bool, bool) { + self.inline_banner + .as_ref() + .map_or((false, false), |banner| { + (banner.shown.get(), banner.dismissed) + }) + } + + pub(super) fn inline_banner_accepts_dismissal(&self) -> bool { + self.inline_banner.as_ref().is_some_and(|banner| { + banner.visible.get() + && !banner.dismissed + && banner.dismissal == BannerDismissal::Dismissible + }) + } + + pub(super) fn handle_inline_banner_key(&mut self, key: KeyEvent) -> bool { + // Draft input, completion menus, and paste bursts retain all of their normal keys. + if !self.composer_is_empty() + || self.composer.popup_active() + || self.composer.is_in_paste_burst() + || self.composer_should_handle_vim_insert_escape(key) + || self.is_task_running + || key.kind != KeyEventKind::Press + || key.modifiers != KeyModifiers::NONE + { + return false; + } + let Some(banner) = self.inline_banner.as_mut() else { + return false; + }; + if !banner.visible.get() || banner.dismissed { + return false; + } + match key.code { + KeyCode::Esc if banner.dismissal == BannerDismissal::Persistent => return false, + KeyCode::Esc => { + banner.dismissed = true; + } + KeyCode::Char(digit @ '1'..='9') => { + if digit as usize - '1' as usize >= banner.visible_action_count.get() { + return false; + } + let InlineBannerContent::Actions(view) = &mut banner.content else { + return false; + }; + view.handle_key_event(key); + let _ = view.take_last_selected_index(); + } + _ => return false, + } + self.request_redraw(); + true + } +} diff --git a/codex-rs/tui/src/bottom_pane/list_selection_view.rs b/codex-rs/tui/src/bottom_pane/list_selection_view.rs index 7895bfd73b..2993540424 100644 --- a/codex-rs/tui/src/bottom_pane/list_selection_view.rs +++ b/codex-rs/tui/src/bottom_pane/list_selection_view.rs @@ -273,6 +273,7 @@ pub(crate) struct ListSelectionView { name_column_width: Option, filtered_indices: Vec, last_selected_actual_idx: Option, + rendered_item_count: std::cell::Cell, header: Box, initial_selected_idx: Option, side_content: Box, @@ -408,6 +409,7 @@ impl ListSelectionView { name_column_width: params.name_column_width, filtered_indices: Vec::new(), last_selected_actual_idx: None, + rendered_item_count: std::cell::Cell::new(0), header, initial_selected_idx: params.initial_selected_idx, side_content: params.side_content, @@ -1197,6 +1199,7 @@ impl Renderable for ListSelectionView { } fn render(&self, area: Rect, buf: &mut Buffer) { + self.rendered_item_count.set(0); if area.height == 0 || area.width == 0 { return; } @@ -1316,7 +1319,7 @@ impl Renderable for ListSelectionView { width: effective_rows_width.max(1), height: list_area.height, }; - match self.row_display { + let rendered_rows = match self.row_display { SelectionRowDisplay::Wrapped => render_rows_with_col_width_mode( render_area, buf, @@ -1336,6 +1339,7 @@ impl Renderable for ListSelectionView { column_width, ), }; + self.rendered_item_count.set(rendered_rows.items); } // -- Side content (preview panel) -- @@ -1432,6 +1436,12 @@ impl Renderable for ListSelectionView { } } +impl ListSelectionView { + pub(crate) fn rendered_item_count(&self) -> usize { + self.rendered_item_count.get() + } +} + #[cfg(test)] mod tests { use super::*; diff --git a/codex-rs/tui/src/bottom_pane/mod.rs b/codex-rs/tui/src/bottom_pane/mod.rs index a5ab19a640..fd2fd4a104 100644 --- a/codex-rs/tui/src/bottom_pane/mod.rs +++ b/codex-rs/tui/src/bottom_pane/mod.rs @@ -13,6 +13,8 @@ //! //! Some UI is time-based rather than input-based, such as the transient "press again to quit" //! hint. The pane schedules redraws so those hints can expire even when the UI is otherwise idle. +//! Inline banners sit above the composer. Number shortcuts apply only to an empty, idle composer; +//! drafts, paste bursts, and active dialogs keep their normal input routing. use std::collections::VecDeque; use std::path::PathBuf; @@ -55,6 +57,7 @@ use std::time::Duration; use std::time::Instant; mod action_required_title; +mod actionable_banner; mod app_link_view; mod apply_patch_header; mod approval_overlay; @@ -67,6 +70,8 @@ mod status_surface_preview; mod title_setup; pub(crate) use action_required_title::ACTION_REQUIRED_PREVIEW_PREFIX; pub(crate) use action_required_title::build_action_required_title_text; +pub(crate) use actionable_banner::ActionableBanner; +pub(crate) use actionable_banner::BannerDismissal; pub(crate) use app_link_view::AppLinkElicitationTarget; pub(crate) use app_link_view::AppLinkSuggestionType; pub(crate) use app_link_view::AppLinkView; @@ -243,6 +248,7 @@ pub(crate) struct BottomPane { /// Inline status indicator shown above the composer while a task is running. status: Option, + inline_banner: Option, /// Unified exec session summary source. /// /// When a status row exists, this summary is mirrored inline in that row; @@ -313,6 +319,7 @@ impl BottomPane { disable_paste_burst, is_task_running: false, status: None, + inline_banner: None, unified_exec_footer: UnifiedExecFooter::new(), pending_input_preview: PendingInputPreview::new(), pending_thread_approvals: PendingThreadApprovals::new(), @@ -691,6 +698,9 @@ impl BottomPane { self.request_redraw(); InputResult::None } else { + if self.handle_inline_banner_key(key_event) { + return InputResult::None; + } // If a task is running and a status line is visible, allow the // configured action to interrupt even while the composer has focus. // When a popup is active, prefer dismissing it over interrupting the task. @@ -1461,7 +1471,10 @@ impl BottomPane { /// overlays or popups and not running a task. This is the safe context to /// use Esc-Esc for backtracking from the main view. pub(crate) fn is_normal_backtrack_mode(&self) -> bool { - !self.is_task_running && self.view_stack.is_empty() && !self.composer.popup_active() + !self.is_task_running + && self.view_stack.is_empty() + && !self.composer.popup_active() + && !self.inline_banner_accepts_dismissal() } /// Return true when no popups or modal views are active, regardless of task state. @@ -1815,10 +1828,22 @@ impl BottomPane { &'_ self, composer_right_reserve: u16, ) -> RenderableItem<'_> { + if (self.is_task_running || !self.view_stack.is_empty()) + && let Some(banner) = &self.inline_banner + { + banner.visible.set(false); + } if let Some(view) = self.active_view() { RenderableItem::Borrowed(view) } else { let mut flex = FlexRenderable::new(); + if let Some(banner) = self + .inline_banner + .as_ref() + .filter(|_| !self.is_task_running) + { + flex.push(/*flex*/ 0, RenderableItem::Borrowed(banner)); + } if let Some(status) = &self.status { flex.push(/*flex*/ 0, RenderableItem::Borrowed(status)); } @@ -1952,6 +1977,9 @@ impl Renderable for BottomPane { #[cfg(test)] mod tests { + #[path = "actionable_banner_tests.rs"] + mod actionable_banner_tests; + use super::*; use crate::app::app_server_requests::ResolvedAppServerRequest; use crate::app_command::AppCommand as Op; @@ -2030,6 +2058,93 @@ mod tests { }) } + #[test] + fn inline_banner_snapshot() { + let (tx, _rx) = unbounded_channel(); + let mut pane = test_pane(AppEventSender::new(tx)); + pane.set_inline_banner(Some(ActionableBanner { + title: "Choose how to continue working".to_string(), + description: "A long description wraps to fit the available terminal width.\n" + .repeat(/*n*/ 8), + actions: vec![ + SelectionItem { + name: "Open usage settings".to_string(), + ..Default::default() + }, + SelectionItem { + name: "Notify owner".to_string(), + ..Default::default() + }, + ], + ..Default::default() + })); + let width = 44; + let area = Rect::new( + /*x*/ 0, + /*y*/ 0, + width, + pane.desired_height(width), + ); + assert_snapshot!( + "inline_banner_wrapped_and_truncated", + render_snapshot(&pane, area) + ); + assert!(!pane.is_normal_backtrack_mode()); + pane.handle_key_event(KeyEvent::new(KeyCode::Esc, KeyModifiers::NONE)); + assert!(pane.is_normal_backtrack_mode()); + } + + #[test] + fn backend_banner_snapshots_and_numbered_actions() { + for (kind, action, label) in [ + ("personal_limit", "view_usage", "View usage"), + ("workspace_member_credits", "notify_owner", "Notify owner"), + ] { + let banner = crate::backend_banners::BackendBanner::parse(&serde_json::json!({ + "banner_type": kind, + "presentation": "dismissible", + "title": "Usage limit\u{7} reached", + "description": "Your included usage is depleted.\nChoose an action to continue.", + "ctas": [ + {"action": "unsupported", "label": "Hidden action"}, + {"action": "view_usage", "label": "Open usage settings"}, + {"action": action, "label": label}, + {"action": "view_usage", "label": "Extra action"} + ] + })) + .expect("valid optional banner"); + let (tx, mut rx) = unbounded_channel(); + let mut pane = test_pane(AppEventSender::new(tx)); + pane.set_inline_banner(Some(banner.actionable_banner())); + let width = 44; + let area = Rect::new( + /*x*/ 0, + /*y*/ 0, + width, + pane.desired_height(width), + ); + assert_snapshot!( + format!("backend_banner_{kind}"), + render_snapshot(&pane, area) + ); + pane.handle_key_event(KeyEvent::new(KeyCode::Char('2'), KeyModifiers::NONE)); + let selected = match rx.try_recv().expect("numbered CTA dispatch") { + AppEvent::OpenUrlInBrowser { url } => url, + AppEvent::SendAddCreditsNudgeEmail { credit_type } => format!("{credit_type:?}"), + other => panic!("unexpected banner action: {other:?}"), + }; + assert_eq!( + selected, + if action == "view_usage" { + "https://chatgpt.com/codex/settings/usage" + } else { + "Credits" + } + ); + assert!(pane.inline_banner.is_some()); + } + } + #[derive(Default)] struct DismissibleView { id: Option<&'static str>, diff --git a/codex-rs/tui/src/bottom_pane/selection_popup_common.rs b/codex-rs/tui/src/bottom_pane/selection_popup_common.rs index 9481006400..aceecb92ed 100644 --- a/codex-rs/tui/src/bottom_pane/selection_popup_common.rs +++ b/codex-rs/tui/src/bottom_pane/selection_popup_common.rs @@ -452,6 +452,12 @@ fn adjust_start_for_wrapped_selection_visibility( /// and behavior for selection popups. /// Returns the number of terminal lines actually rendered (including the /// single-line empty placeholder when shown). +#[derive(Clone, Copy, Default)] +pub(crate) struct RenderedRows { + pub(crate) lines: u16, + pub(crate) items: usize, +} + fn render_rows_inner( area: Rect, buf: &mut Buffer, @@ -460,18 +466,21 @@ fn render_rows_inner( max_results: usize, empty_message: &str, column_width: ColumnWidthConfig, -) -> u16 { +) -> RenderedRows { if rows_all.is_empty() { if area.height > 0 { Line::from(empty_message.dim().italic()).render(area, buf); } // Count the placeholder line only when there is vertical space to draw it. - return u16::from(area.height > 0); + return RenderedRows { + lines: u16::from(area.height > 0), + items: 0, + }; } let max_items = max_results.min(rows_all.len()); if max_items == 0 { - return 0; + return RenderedRows::default(); } let desc_measure_items = max_items.min(area.height.max(1) as usize); @@ -499,6 +508,7 @@ fn render_rows_inner( // shared description column. Stop when we run out of vertical space. let mut cur_y = area.y; let mut rendered_lines: u16 = 0; + let mut rendered_items = 0; for (i, row) in rows_all.iter().enumerate().skip(start_idx).take(max_items) { if cur_y >= area.y + area.height { break; @@ -513,6 +523,7 @@ fn render_rows_inner( ); // Render the wrapped lines. + let mut rendered_item = false; for line in wrapped { if cur_y >= area.y + area.height { break; @@ -528,10 +539,17 @@ fn render_rows_inner( ); cur_y = cur_y.saturating_add(1); rendered_lines = rendered_lines.saturating_add(1); + rendered_item = true; + } + if rendered_item { + rendered_items += 1; } } - rendered_lines + RenderedRows { + lines: rendered_lines, + items: rendered_items, + } } /// Render a list of rows using the provided ScrollState, with shared styling @@ -559,6 +577,7 @@ pub(crate) fn render_rows( empty_message, ColumnWidthConfig::default(), ) + .lines } /// Render a list of rows using the provided ScrollState and explicit @@ -566,7 +585,7 @@ pub(crate) fn render_rows( /// /// This is the low-level entry point for callers that need to thread a mode /// through higher-level configuration. -/// Returns the number of terminal lines actually rendered. +/// Returns the terminal lines and selectable items actually rendered. pub(crate) fn render_rows_with_col_width_mode( area: Rect, buf: &mut Buffer, @@ -575,7 +594,7 @@ pub(crate) fn render_rows_with_col_width_mode( max_results: usize, empty_message: &str, column_width: ColumnWidthConfig, -) -> u16 { +) -> RenderedRows { render_rows_inner( area, buf, @@ -609,10 +628,12 @@ pub(crate) fn render_rows_single_line( empty_message, ColumnWidthConfig::default(), ) + .lines } /// Render a list of rows as a single line each (no wrapping), truncating overflow with an /// ellipsis while honoring the configured column width behavior. +/// Returns the terminal lines and selectable items actually rendered. pub(crate) fn render_rows_single_line_with_col_width_mode( area: Rect, buf: &mut Buffer, @@ -621,13 +642,16 @@ pub(crate) fn render_rows_single_line_with_col_width_mode( max_results: usize, empty_message: &str, column_width: ColumnWidthConfig, -) -> u16 { +) -> RenderedRows { if rows_all.is_empty() { if area.height > 0 { Line::from(empty_message.dim().italic()).render(area, buf); } // Count the placeholder line only when there is vertical space to draw it. - return u16::from(area.height > 0); + return RenderedRows { + lines: u16::from(area.height > 0), + items: 0, + }; } let visible_items = max_results @@ -686,7 +710,10 @@ pub(crate) fn render_rows_single_line_with_col_width_mode( rendered_lines = rendered_lines.saturating_add(1); } - rendered_lines + RenderedRows { + lines: rendered_lines, + items: rendered_lines as usize, + } } /// Compute the number of terminal rows required to render up to `max_results` diff --git a/codex-rs/tui/src/bottom_pane/snapshots/codex_tui__bottom_pane__tests__backend_banner_personal_limit.snap b/codex-rs/tui/src/bottom_pane/snapshots/codex_tui__bottom_pane__tests__backend_banner_personal_limit.snap new file mode 100644 index 0000000000..c0eed8e3c8 --- /dev/null +++ b/codex-rs/tui/src/bottom_pane/snapshots/codex_tui__bottom_pane__tests__backend_banner_personal_limit.snap @@ -0,0 +1,18 @@ +--- +source: tui/src/bottom_pane/mod.rs +expression: "render_snapshot(&pane, area)" +--- + + Usage limit reached + Your included usage is depleted. + Choose an action to continue. + +› 1. Open usage settings + 2. View usage + 3. Extra action + + Press a number to choose · esc to dismiss + +› Ask Codex to do anything + + ? for shortcuts 100% context left diff --git a/codex-rs/tui/src/bottom_pane/snapshots/codex_tui__bottom_pane__tests__backend_banner_workspace_member_credits.snap b/codex-rs/tui/src/bottom_pane/snapshots/codex_tui__bottom_pane__tests__backend_banner_workspace_member_credits.snap new file mode 100644 index 0000000000..5a94128004 --- /dev/null +++ b/codex-rs/tui/src/bottom_pane/snapshots/codex_tui__bottom_pane__tests__backend_banner_workspace_member_credits.snap @@ -0,0 +1,18 @@ +--- +source: tui/src/bottom_pane/mod.rs +expression: "render_snapshot(&pane, area)" +--- + + Usage limit reached + Your included usage is depleted. + Choose an action to continue. + +› 1. Open usage settings + 2. Notify owner + 3. Extra action + + Press a number to choose · esc to dismiss + +› Ask Codex to do anything + + ? for shortcuts 100% context left diff --git a/codex-rs/tui/src/bottom_pane/snapshots/codex_tui__bottom_pane__tests__inline_banner_wrapped_and_truncated.snap b/codex-rs/tui/src/bottom_pane/snapshots/codex_tui__bottom_pane__tests__inline_banner_wrapped_and_truncated.snap new file mode 100644 index 0000000000..9f72caad92 --- /dev/null +++ b/codex-rs/tui/src/bottom_pane/snapshots/codex_tui__bottom_pane__tests__inline_banner_wrapped_and_truncated.snap @@ -0,0 +1,22 @@ +--- +source: tui/src/bottom_pane/mod.rs +expression: "render_snapshot(&pane, area)" +--- + + Choose how to continue working + A long description wraps to fit the + available terminal width. + A long description wraps to fit the + available terminal width. + A long description wraps to fit the + available terminal width. + … + +› 1. Open usage settings + 2. Notify owner + + Press a number to choose · esc to dismiss + +› Ask Codex to do anything + + ? for shortcuts 100% context left diff --git a/codex-rs/tui/src/bottom_pane/tests/actionable_banner_tests.rs b/codex-rs/tui/src/bottom_pane/tests/actionable_banner_tests.rs new file mode 100644 index 0000000000..98646682b4 --- /dev/null +++ b/codex-rs/tui/src/bottom_pane/tests/actionable_banner_tests.rs @@ -0,0 +1,170 @@ +use super::super::actionable_banner::BannerDismissal; +use super::*; +use pretty_assertions::assert_eq; + +#[test] +fn hidden_banner_preserves_input_before_render_and_after_resize() { + let (tx, mut rx) = unbounded_channel(); + let mut pane = test_pane_with_disable_paste_burst( + AppEventSender::new(tx), + /*disable_paste_burst*/ true, + ); + pane.set_inline_banner(Some(ActionableBanner { + title: "Usage limit reached".into(), + actions: vec![SelectionItem { + name: "View usage".into(), + actions: vec![Box::new(|tx| { + tx.send(AppEvent::OpenUrlInBrowser { + url: "https://example.com/usage".into(), + }); + })], + ..Default::default() + }], + ..Default::default() + })); + let width = 70; + let hidden_area = Rect::new( + /*x*/ 0, + /*y*/ 0, + width, + pane.composer.desired_height(width), + ); + let visible_area = Rect::new( + /*x*/ 0, + /*y*/ 0, + width, + pane.desired_height(width), + ); + + // Keys remain composer input before the first frame and after resizing a + // previously visible banner out of view. + for render_hidden in [false, true] { + if render_hidden { + let rendered = render_snapshot(&pane, hidden_area); + assert!(!rendered.contains("View usage")); + } + pane.handle_key_event(KeyEvent::new(KeyCode::Char('1'), KeyModifiers::NONE)); + assert_eq!(pane.composer_text(), "1"); + assert!(rx.try_recv().is_err()); + pane.set_composer_text(String::new(), Vec::new(), Vec::new()); + assert!(pane.is_normal_backtrack_mode()); + pane.handle_key_event(KeyEvent::new(KeyCode::Esc, KeyModifiers::NONE)); + + let rendered = render_snapshot(&pane, visible_area); + assert!(rendered.contains("View usage")); + assert!(!pane.is_normal_backtrack_mode()); + pane.handle_key_event(KeyEvent::new(KeyCode::Char('1'), KeyModifiers::NONE)); + assert_eq!(pane.composer_text(), ""); + assert!( + matches!(rx.try_recv(), Ok(AppEvent::OpenUrlInBrowser { url }) + if url == "https://example.com/usage") + ); + } + + pane.handle_key_event(KeyEvent::new(KeyCode::Esc, KeyModifiers::NONE)); + assert!(pane.is_normal_backtrack_mode()); + assert!(!render_snapshot(&pane, visible_area).contains("View usage")); +} + +#[test] +fn partially_clipped_banner_preserves_hidden_action_shortcuts() { + let (tx, mut rx) = unbounded_channel(); + let mut pane = test_pane_with_disable_paste_burst( + AppEventSender::new(tx), + /*disable_paste_burst*/ true, + ); + pane.set_inline_banner(Some(ActionableBanner { + title: "Usage limit reached".into(), + actions: vec![SelectionItem { + name: "View usage".into(), + actions: vec![Box::new(|tx| { + tx.send(AppEvent::OpenUrlInBrowser { + url: "https://example.com/usage".into(), + }); + })], + ..Default::default() + }], + ..Default::default() + })); + let width = 70; + let footer_only_area = Rect::new( + /*x*/ 0, + /*y*/ 0, + width, + pane.composer.desired_height(width) + 1, + ); + + let rendered = render_snapshot(&pane, footer_only_area); + assert!(!rendered.contains("View usage")); + pane.handle_key_event(KeyEvent::new(KeyCode::Char('1'), KeyModifiers::NONE)); + assert_eq!(pane.composer_text(), "1"); + assert!(rx.try_recv().is_err()); +} + +#[test] +fn banner_hidden_during_task_waits_for_redraw_before_accepting_dismissal() { + let (tx, _rx) = unbounded_channel(); + let mut pane = test_pane(AppEventSender::new(tx)); + pane.set_inline_banner(Some(ActionableBanner { + title: "Usage limit reached".into(), + ..Default::default() + })); + let width = 70; + let area = Rect::new( + /*x*/ 0, + /*y*/ 0, + width, + pane.desired_height(width), + ); + assert!(render_snapshot(&pane, area).contains("Usage limit reached")); + + pane.set_task_running(/*running*/ true); + assert!(!render_snapshot(&pane, area).contains("Usage limit reached")); + pane.set_task_running(/*running*/ false); + assert!(pane.is_normal_backtrack_mode()); + pane.handle_key_event(KeyEvent::new(KeyCode::Esc, KeyModifiers::NONE)); + assert!(render_snapshot(&pane, area).contains("Usage limit reached")); + assert!(!pane.is_normal_backtrack_mode()); +} + +#[test] +fn information_banner_preserves_input_and_honors_dismissal() { + for dismissal in [BannerDismissal::Persistent, BannerDismissal::Dismissible] { + let (tx, _rx) = unbounded_channel(); + let mut pane = test_pane_with_disable_paste_burst( + AppEventSender::new(tx), + /*disable_paste_burst*/ true, + ); + pane.set_inline_banner(Some(ActionableBanner { + title: "Usage limit reached".into(), + description: "You can change models or request more usage.".into(), + dismissal, + ..Default::default() + })); + let area = Rect::new( + /*x*/ 0, + /*y*/ 0, + /*width*/ 70, + pane.desired_height(/*width*/ 70), + ); + let rendered = render_snapshot(&pane, area); + assert!(!rendered.contains("no matches")); + assert!(!rendered.contains("Press a number")); + assert_eq!( + rendered.contains("esc to dismiss"), + dismissal == BannerDismissal::Dismissible + ); + if dismissal == BannerDismissal::Persistent { + assert_snapshot!("information_banner_persistent", rendered); + } else { + assert_snapshot!("information_banner_dismissible", rendered); + } + pane.handle_key_event(KeyEvent::new(KeyCode::Esc, KeyModifiers::NONE)); + assert_eq!( + render_snapshot(&pane, area).contains("Usage limit reached"), + dismissal == BannerDismissal::Persistent + ); + pane.handle_key_event(KeyEvent::new(KeyCode::Char('1'), KeyModifiers::NONE)); + assert_eq!(pane.composer_text(), "1"); + } +} diff --git a/codex-rs/tui/src/bottom_pane/tests/snapshots/codex_tui__bottom_pane__tests__actionable_banner_tests__information_banner_dismissible.snap b/codex-rs/tui/src/bottom_pane/tests/snapshots/codex_tui__bottom_pane__tests__actionable_banner_tests__information_banner_dismissible.snap new file mode 100644 index 0000000000..9c624f0467 --- /dev/null +++ b/codex-rs/tui/src/bottom_pane/tests/snapshots/codex_tui__bottom_pane__tests__actionable_banner_tests__information_banner_dismissible.snap @@ -0,0 +1,15 @@ +--- +source: tui/src/bottom_pane/tests/actionable_banner_tests.rs +assertion_line: 34 +expression: rendered +--- + + Usage limit reached + You can change models or request more usage. + + esc to dismiss · type to continue + + +› Ask Codex to do anything + + ? for shortcuts 100% context left diff --git a/codex-rs/tui/src/bottom_pane/tests/snapshots/codex_tui__bottom_pane__tests__actionable_banner_tests__information_banner_persistent.snap b/codex-rs/tui/src/bottom_pane/tests/snapshots/codex_tui__bottom_pane__tests__actionable_banner_tests__information_banner_persistent.snap new file mode 100644 index 0000000000..f717e24265 --- /dev/null +++ b/codex-rs/tui/src/bottom_pane/tests/snapshots/codex_tui__bottom_pane__tests__actionable_banner_tests__information_banner_persistent.snap @@ -0,0 +1,13 @@ +--- +source: tui/src/bottom_pane/tests/actionable_banner_tests.rs +assertion_line: 32 +expression: rendered +--- + + Usage limit reached + You can change models or request more usage. + + +› Ask Codex to do anything + + ? for shortcuts 100% context left diff --git a/codex-rs/tui/src/chatwidget.rs b/codex-rs/tui/src/chatwidget.rs index ab529a0fd6..4b601e5728 100644 --- a/codex-rs/tui/src/chatwidget.rs +++ b/codex-rs/tui/src/chatwidget.rs @@ -393,6 +393,7 @@ mod permission_shortcuts; mod permissions_menu; pub(crate) use self::permissions_menu::auto_review_available; pub(crate) use self::permissions_menu::cyber_model_approval_reviewer; +mod backend_banners; mod protocol; mod protocol_requests; mod rate_limits; @@ -594,9 +595,11 @@ pub(crate) struct ChatWidget { codex_rate_limit_reached_type: Option, codex_spend_control_reached: Option, rate_limit_warnings: RateLimitWarningState, + backend_banner_state: backend_banners::BackendBannerState, + backend_banner_notice_model: Option, warning_display_state: WarningDisplayState, rate_limit_switch_prompt: RateLimitSwitchPromptState, - add_credits_nudge_email_in_flight: Option, + add_credits_nudge_email_in_flight: Option, adaptive_chunking: AdaptiveChunkingPolicy, // Stream lifecycle controller stream_controller: Option, diff --git a/codex-rs/tui/src/chatwidget/backend_banners.rs b/codex-rs/tui/src/chatwidget/backend_banners.rs new file mode 100644 index 0000000000..c362658030 --- /dev/null +++ b/codex-rs/tui/src/chatwidget/backend_banners.rs @@ -0,0 +1,180 @@ +//! Account banner state, independent of the current model and the lifetime of its rendered view. +//! +//! Only explicitly dismissible, previously shown occurrences can be dismissed. Model changes hide +//! content without dismissing it; an authoritative replacement/absence starts a new occurrence. + +use super::ChatWidget; +use crate::backend_banners::BackendBanner; +use crate::backend_banners::BannerPresentation; +use codex_app_server_protocol::GetAccountRateLimitsResponse; +use codex_protocol::config_types::CollaborationMode; +use codex_protocol::config_types::ModeKind; +use codex_protocol::openai_models::ModelPreset; + +#[derive(Default)] +pub(super) struct BackendBannerState { + banner: Option, + presented: Option, + shown: bool, + dismissed: bool, +} + +impl ChatWidget { + pub(crate) fn backend_banner_fallback(&self) -> Option { + let banner = self.backend_banner_state.banner.as_ref()?; + if !self.has_chatgpt_account + || !self.config.model_provider.requires_openai_auth + || banner.blocked_model_slug.as_deref() != Some(self.current_model()) + { + return None; + } + let models = self.model_catalog.try_list_models().ok()?; + banner.fallback_model_slugs.iter().find_map(|candidate| { + models + .iter() + .find(|model| { + model.show_in_picker + && model.model == *candidate + && model.model != self.current_model() + }) + .cloned() + }) + } + + /// Commit a successfully applied task setting and keep its recovery notice visible together. + pub(crate) fn finish_backend_banner_fallback(&mut self, mode: CollaborationMode) { + self.set_model(mode.model()); + self.set_reasoning_effort(mode.reasoning_effort()); + if mode.mode == ModeKind::Plan { + self.set_plan_mode_reasoning_effort(mode.reasoning_effort()); + } + self.set_effective_collaboration_mode(mode); + // Showing the post-switch notice is distinct from having seen the original blocked state. + self.backend_banner_state.shown = false; + self.backend_banner_state.dismissed = false; + self.backend_banner_notice_model = Some(self.current_model().to_string()); + self.refresh_backend_banner_visibility(); + } + + pub(crate) fn inherit_backend_banner_state(&mut self, previous: &mut ChatWidget) { + previous.observe_backend_banner_view(); + self.backend_banner_state = std::mem::take(&mut previous.backend_banner_state); + self.backend_banner_state.presented = None; + self.refresh_backend_banner_visibility(); + } + + pub(crate) fn update_backend_banner(&mut self, response: &GetAccountRateLimitsResponse) { + self.observe_backend_banner_view(); + let banner = response + .rate_limit_upsell + .as_ref() + .and_then(BackendBanner::parse) + .map(|mut banner| { + banner.account_id = response.account_id.clone().unwrap_or_default(); + banner.plan_type = response.rate_limits.plan_type; + banner + }); + let same_occurrence = self + .backend_banner_state + .banner + .as_ref() + .zip(banner.as_ref()) + .is_some_and(|(old, new)| { + old.account_id == new.account_id + && old.banner_type == new.banner_type + && old.reset_at == new.reset_at + && old.presentation == new.presentation + && old.blocked_model_slug.as_ref().or(old.model_slug.as_ref()) + == new.blocked_model_slug.as_ref().or(new.model_slug.as_ref()) + && old.fallback_model_slugs == new.fallback_model_slugs + }); + if !same_occurrence { + self.backend_banner_state.shown = false; + self.backend_banner_state.dismissed = false; + self.backend_banner_notice_model = None; + } + self.backend_banner_state.banner = banner; + self.refresh_backend_banner_visibility(); + } + + fn observe_backend_banner_view(&mut self) { + let (shown, dismissed) = self.bottom_pane.inline_banner_lifecycle(); + self.backend_banner_state.shown |= shown; + self.backend_banner_state.dismissed |= dismissed; + } + + pub(super) fn refresh_backend_banner_visibility(&mut self) { + let banner = self.backend_banner_state.banner.as_ref().filter(|banner| { + // Explicit fallback payloads describe the selected replacement, not a pending switch. + let matches_selected_model = match banner.blocked_model_slug.as_deref() { + Some(blocked) if !banner.fallback_model_slugs.is_empty() => { + blocked != self.current_model() + && banner + .fallback_model_slugs + .iter() + .any(|model| model == self.current_model()) + } + Some(_) | None => { + banner + .model_slug + .as_deref() + .is_none_or(|model| model == self.current_model()) + || self.backend_banner_notice_model.as_deref() == Some(self.current_model()) + } + }; + !self.backend_banner_state.dismissed && matches_selected_model + }); + if banner == self.backend_banner_state.presented.as_ref() { + return; + } + let content = banner.map(BackendBanner::actionable_banner); + self.backend_banner_state.presented = banner.cloned(); + if content.is_some() { + self.bottom_pane + .dismiss_view_by_id(super::rate_limits::WORKSPACE_NUDGE_VIEW_ID); + if self + .bottom_pane + .dismiss_view_by_id(super::rate_limits::RATE_LIMIT_SWITCH_PROMPT_VIEW_ID) + { + // Replacing the view is not the user's decision to dismiss the prompt. + self.rate_limit_switch_prompt = super::RateLimitSwitchPromptState::Pending; + } + } + self.bottom_pane.set_inline_banner(content); + if self.backend_banner_state.presented.is_none() + && !self.bottom_pane.is_task_running() + && self.bottom_pane.no_modal_or_popup_active() + { + self.maybe_show_pending_rate_limit_prompt(); + } + } + + pub(super) fn sync_backend_banner_view(&mut self) { + self.observe_backend_banner_view(); + self.refresh_backend_banner_visibility(); + } + + pub(super) fn dismiss_backend_banner_for_new_turn(&mut self) { + self.observe_backend_banner_view(); + if self.backend_banner_state.shown + && self + .backend_banner_state + .presented + .as_ref() + .is_some_and(|banner| banner.presentation == BannerPresentation::Dismissible) + { + self.backend_banner_state.dismissed = true; + self.refresh_backend_banner_visibility(); + } + } + + pub(super) fn has_applicable_backend_banner(&self) -> bool { + !self.backend_banner_state.dismissed && self.backend_banner_state.presented.is_some() + } + + pub(crate) fn clear_backend_banner(&mut self) { + self.backend_banner_state = BackendBannerState::default(); + self.backend_banner_notice_model = None; + self.bottom_pane.set_inline_banner(/*banner*/ None); + } +} diff --git a/codex-rs/tui/src/chatwidget/constructor.rs b/codex-rs/tui/src/chatwidget/constructor.rs index 7c3dec2ae6..24e84747ee 100644 --- a/codex-rs/tui/src/chatwidget/constructor.rs +++ b/codex-rs/tui/src/chatwidget/constructor.rs @@ -147,6 +147,8 @@ impl ChatWidget { codex_rate_limit_reached_type: None, codex_spend_control_reached: None, rate_limit_warnings: RateLimitWarningState::default(), + backend_banner_state: backend_banners::BackendBannerState::default(), + backend_banner_notice_model: None, warning_display_state: WarningDisplayState::default(), rate_limit_switch_prompt: RateLimitSwitchPromptState::default(), add_credits_nudge_email_in_flight: None, diff --git a/codex-rs/tui/src/chatwidget/input_flow.rs b/codex-rs/tui/src/chatwidget/input_flow.rs index 5daab24c48..2e056558fa 100644 --- a/codex-rs/tui/src/chatwidget/input_flow.rs +++ b/codex-rs/tui/src/chatwidget/input_flow.rs @@ -32,6 +32,7 @@ impl ChatWidget { let should_submit_now = self.is_session_configured() && !self.is_plan_streaming_in_tui() && !self.input_queue.suppress_queue_autosend + && !self.input_queue.rate_limit_recovery_pending && (!self.input_queue.user_turn_pending_start || self.turn_lifecycle.agent_turn_running); if should_submit_now { @@ -114,7 +115,8 @@ impl ChatWidget { } let should_run_now = self.is_session_configured() && !self.is_user_turn_pending_or_running() - && !self.input_queue.suppress_queue_autosend; + && !self.input_queue.suppress_queue_autosend + && !self.input_queue.rate_limit_recovery_pending; if !should_run_now || action != QueuedInputAction::Plain { self.input_queue .queued_user_messages @@ -140,6 +142,7 @@ impl ChatWidget { if !self.is_session_configured() || self.misalignment_policy_violation || self.input_queue.suppress_queue_autosend + || self.input_queue.rate_limit_recovery_pending { return false; } diff --git a/codex-rs/tui/src/chatwidget/input_queue.rs b/codex-rs/tui/src/chatwidget/input_queue.rs index 67a306af22..f14059e3ca 100644 --- a/codex-rs/tui/src/chatwidget/input_queue.rs +++ b/codex-rs/tui/src/chatwidget/input_queue.rs @@ -42,6 +42,8 @@ pub(super) struct InputQueueState { /// fresh user turn instead of restoring them into the composer. pub(super) submit_pending_steers_after_interrupt: bool, pub(super) suppress_queue_autosend: bool, + /// Hold submissions while a usage failure or backend-directed model fallback is resolved. + pub(super) rate_limit_recovery_pending: bool, } impl InputQueueState { @@ -57,6 +59,7 @@ impl InputQueueState { self.rejected_steer_history_records.clear(); self.pending_steers.clear(); self.submit_pending_steers_after_interrupt = false; + self.rate_limit_recovery_pending = false; } pub(super) fn preview(&self) -> PendingInputPreview { diff --git a/codex-rs/tui/src/chatwidget/input_restore.rs b/codex-rs/tui/src/chatwidget/input_restore.rs index 28b88f89d1..89d93a6cb0 100644 --- a/codex-rs/tui/src/chatwidget/input_restore.rs +++ b/codex-rs/tui/src/chatwidget/input_restore.rs @@ -118,7 +118,8 @@ impl ChatWidget { } pub(crate) fn submit_initial_user_message_if_pending(&mut self) { - if self.suppress_initial_user_message_submit { + if self.suppress_initial_user_message_submit || self.input_queue.rate_limit_recovery_pending + { return; } #[cfg(any(target_os = "windows", test))] diff --git a/codex-rs/tui/src/chatwidget/input_submission.rs b/codex-rs/tui/src/chatwidget/input_submission.rs index 1fc8b6ba04..8571519c7f 100644 --- a/codex-rs/tui/src/chatwidget/input_submission.rs +++ b/codex-rs/tui/src/chatwidget/input_submission.rs @@ -114,6 +114,16 @@ impl ChatWidget { if self.misalignment_policy_violation { return (false, None); } + if self.input_queue.rate_limit_recovery_pending { + self.input_queue + .queued_user_messages + .push_back(QueuedUserMessage::from(user_message)); + self.input_queue + .queued_user_message_history_records + .push_back(history_record); + self.refresh_pending_input_preview(); + return (true, None); + } if !self.is_session_configured() { tracing::warn!("cannot submit user message before session is configured; queueing"); self.input_queue @@ -394,6 +404,7 @@ impl ChatWidget { if !self.submit_op(op.clone()) { return (false, None); } + self.dismiss_backend_banner_for_new_turn(); if render_in_history { self.input_queue.user_turn_pending_start = true; } diff --git a/codex-rs/tui/src/chatwidget/interaction.rs b/codex-rs/tui/src/chatwidget/interaction.rs index b38e33b56f..e36dcb582d 100644 --- a/codex-rs/tui/src/chatwidget/interaction.rs +++ b/codex-rs/tui/src/chatwidget/interaction.rs @@ -180,6 +180,7 @@ impl ChatWidget { self.flush_completed_command_activity(); } let input_result = self.bottom_pane.handle_key_event(key_event); + self.sync_backend_banner_view(); if should_pause_active_goal { self.pause_active_goal_for_interrupt(); } diff --git a/codex-rs/tui/src/chatwidget/rate_limits.rs b/codex-rs/tui/src/chatwidget/rate_limits.rs index d8cd725a32..255b8e2897 100644 --- a/codex-rs/tui/src/chatwidget/rate_limits.rs +++ b/codex-rs/tui/src/chatwidget/rate_limits.rs @@ -1,7 +1,15 @@ //! Rate-limit warning, prompt, and notice surfaces for `ChatWidget`. use super::*; +pub(super) const WORKSPACE_NUDGE_VIEW_ID: &str = "workspace-usage-nudge"; +use crate::bottom_pane::ActionableBanner; use codex_app_server_protocol::CodexErrorInfo as AppServerCodexErrorInfo; +use uuid::Uuid; + +pub(super) struct PendingCreditsNudge { + request_id: Uuid, + credit_type: AddCreditsNudgeCreditType, +} pub(super) const NUDGE_MODEL_SLUG: &str = "gpt-5.6-luna"; pub(super) const RATE_LIMIT_SWITCH_PROMPT_THRESHOLD: f64 = 90.0; @@ -162,11 +170,31 @@ fn has_usable_workspace_credits(credits: &CreditsSnapshot) -> bool { } impl ChatWidget { + pub(crate) fn hold_rate_limit_recovery(&mut self) -> bool { + std::mem::replace(&mut self.input_queue.rate_limit_recovery_pending, true) + } + + pub(crate) fn finish_rate_limit_recovery(&mut self) { + if std::mem::take(&mut self.input_queue.rate_limit_recovery_pending) { + self.submit_initial_user_message_if_pending(); + self.maybe_send_next_queued_input(); + } + } + pub(crate) fn on_rate_limit_snapshot(&mut self, snapshot: Option) { self.on_rate_limit_snapshot_from(snapshot, RateLimitSnapshotSource::AccountUsage); } pub(crate) fn on_rolling_rate_limit_snapshot(&mut self, snapshot: RateLimitSnapshot) { + if let (Some(previous), Some(current)) = ( + self.codex_rate_limit_reached_type, + snapshot.rate_limit_reached_type, + ) && previous != current + { + // Do not keep a credits CTA when a newer notification requires a different remedy. + // An absent aggregate limit type is not a contradiction of model-scoped recovery. + self.clear_backend_banner(); + } // Rolling app-server notifications are sparse. Preserve metadata learned from the full read. self.on_rate_limit_snapshot_from(Some(snapshot), RateLimitSnapshotSource::RollingUpdate); } @@ -347,7 +375,10 @@ impl ChatWidget { } pub(super) fn maybe_show_pending_rate_limit_prompt(&mut self) { - if self.rate_limit_switch_prompt_hidden() { + if self.has_applicable_backend_banner() { + return; + } + if self.rate_limit_switch_prompt_hidden() || self.current_model() == NUDGE_MODEL_SLUG { self.rate_limit_switch_prompt = RateLimitSwitchPromptState::Idle; return; } @@ -482,11 +513,11 @@ impl ChatWidget { }, ]; - self.bottom_pane.show_selection_view(SelectionViewParams { - title: Some(title.to_string()), - subtitle: Some(prompt.to_string()), - footer_hint: Some(standard_popup_hint_line()), - items, + self.bottom_pane.show_actionable_banner(ActionableBanner { + view_id: Some(WORKSPACE_NUDGE_VIEW_ID), + title: title.to_string(), + description: prompt.to_string(), + actions: items, initial_selected_idx: Some(1), ..Default::default() }); @@ -495,19 +526,32 @@ impl ChatWidget { pub(crate) fn start_add_credits_nudge_email_request( &mut self, credit_type: AddCreditsNudgeCreditType, - ) -> bool { - self.add_credits_nudge_email_in_flight = Some(credit_type); - true + ) -> Option { + if self.add_credits_nudge_email_in_flight.is_some() { + return None; + } + let request_id = Uuid::new_v4(); + self.add_credits_nudge_email_in_flight = Some(PendingCreditsNudge { + request_id, + credit_type, + }); + Some(request_id) } pub(crate) fn finish_add_credits_nudge_email_request( &mut self, + request_id: Uuid, result: Result, ) { - let credit_type = self + let Some(pending) = self .add_credits_nudge_email_in_flight - .take() - .unwrap_or(AddCreditsNudgeCreditType::Credits); + .as_ref() + .filter(|pending| pending.request_id == request_id) + else { + return; + }; + let credit_type = pending.credit_type; + self.add_credits_nudge_email_in_flight = None; let message = match (credit_type, result) { (AddCreditsNudgeCreditType::Credits, Ok(AddCreditsNudgeEmailStatus::Sent)) => { "Workspace owner notified." diff --git a/codex-rs/tui/src/chatwidget/session_flow.rs b/codex-rs/tui/src/chatwidget/session_flow.rs index e4e910523b..ce996c784a 100644 --- a/codex-rs/tui/src/chatwidget/session_flow.rs +++ b/codex-rs/tui/src/chatwidget/session_flow.rs @@ -25,6 +25,7 @@ impl ChatWidget { self.bottom_pane .set_queue_submissions(/*queue_submissions*/ false); if previous_thread_id != self.thread_id { + self.backend_banner_notice_model = None; self.pending_automatic_thread_names.clear(); self.review.recent_auto_review_denials = RecentAutoReviewDenials::default(); self.clear_thread_usage_state(); diff --git a/codex-rs/tui/src/chatwidget/settings.rs b/codex-rs/tui/src/chatwidget/settings.rs index 75f3e8fba4..74d3e7f15d 100644 --- a/codex-rs/tui/src/chatwidget/settings.rs +++ b/codex-rs/tui/src/chatwidget/settings.rs @@ -220,6 +220,9 @@ impl ChatWidget { self.invalidate_connector_scope(); self.clear_pending_token_activity_refreshes(); self.clear_pending_rate_limit_reset_requests(); + self.clear_backend_banner(); + self.input_queue.rate_limit_recovery_pending = false; + self.add_credits_nudge_email_in_flight = None; self.codex_rate_limit_reached_type = None; self.codex_spend_control_reached = None; self.rate_limit_warnings = RateLimitWarningState::default(); @@ -446,6 +449,7 @@ impl ChatWidget { /// header/title (`refresh_model_display`) but forget the footer status line /// (`refresh_status_line`). pub(super) fn refresh_model_dependent_surfaces(&mut self) { + self.sync_backend_banner_view(); self.refresh_model_display(); self.refresh_status_line(); } diff --git a/codex-rs/tui/src/chatwidget/tests.rs b/codex-rs/tui/src/chatwidget/tests.rs index 2de6b97774..d59533eb29 100644 --- a/codex-rs/tui/src/chatwidget/tests.rs +++ b/codex-rs/tui/src/chatwidget/tests.rs @@ -233,6 +233,8 @@ fn next_goal_draft( mod app_server; mod approval_requests; +#[path = "tests/backend_banners_tests.rs"] +mod backend_banners_tests; mod composer_submission; #[path = "tests/config_errors_tests.rs"] mod config_errors; @@ -252,6 +254,8 @@ mod plan_mode; #[path = "tests/plugin_catalog_tests.rs"] mod plugin_catalog; mod popups_and_settings; +#[path = "tests/rate_limit_recovery_tests.rs"] +mod rate_limit_recovery_tests; mod review_mode; mod side; mod slash_commands; diff --git a/codex-rs/tui/src/chatwidget/tests/backend_banners_tests.rs b/codex-rs/tui/src/chatwidget/tests/backend_banners_tests.rs new file mode 100644 index 0000000000..b3ed272fb9 --- /dev/null +++ b/codex-rs/tui/src/chatwidget/tests/backend_banners_tests.rs @@ -0,0 +1,419 @@ +use super::*; +use codex_app_server_protocol::GetAccountRateLimitsResponse; +use pretty_assertions::assert_eq; +use serde_json::json; + +fn banner_response( + presentation: Option<&str>, + ctas: serde_json::Value, +) -> GetAccountRateLimitsResponse { + let mut banner = json!({ + "banner_type": "selected_model_limit", "model_slug": "test-model-a", + "title": "Selected model usage exhausted", + "description": "Ask your owner for credits or switch to another model.", "ctas": ctas, + }); + if let Some(presentation) = presentation { + banner["presentation"] = json!(presentation); + } + GetAccountRateLimitsResponse { + account_id: Some("workspace-a".into()), + rate_limit_upsell: Some(banner), + rate_limits: snapshot(/*percent*/ 25.0), + rate_limits_by_limit_id: None, + rate_limit_reset_credits: None, + } +} + +#[tokio::test] +async fn backend_banner_presentation_and_cta_do_not_imply_recovery() { + for presentation in [None, Some("inline"), Some("dismissible")] { + let (mut chat, mut rx, _ops) = make_chatwidget_manual(Some("test-model-a")).await; + let response = banner_response( + presentation, + json!([{"action":"notify_owner","label":"Notify owner"}]), + ); + chat.update_backend_banner(&response); + let initial = render_bottom_popup(&chat, /*width*/ 70); + assert!(initial.contains("Selected model usage exhausted")); + assert_eq!( + initial.contains("esc to dismiss"), + presentation == Some("dismissible") + ); + chat.handle_key_event(KeyEvent::new(KeyCode::Char('1'), KeyModifiers::NONE)); + assert!( + rx.try_recv() + .is_ok_and(|event| matches!(event, AppEvent::SendAddCreditsNudgeEmail { .. })) + ); + assert_eq!(render_bottom_popup(&chat, /*width*/ 70), initial); + let request_id = chat + .start_add_credits_nudge_email_request(AddCreditsNudgeCreditType::Credits) + .expect("start notification"); + if presentation == Some("inline") { + insta::assert_snapshot!( + "backend_banner_notification", + normalize_snapshot_paths(render_bottom_popup(&chat, /*width*/ 70)) + ); + } + chat.handle_key_event(KeyEvent::new(KeyCode::Char('1'), KeyModifiers::NONE)); + assert!( + rx.try_recv() + .is_ok_and(|event| matches!(event, AppEvent::SendAddCreditsNudgeEmail { .. })) + ); + assert_eq!(chat.composer_text_with_pending(), ""); + assert!( + chat.start_add_credits_nudge_email_request(AddCreditsNudgeCreditType::Credits) + .is_none() + ); + chat.finish_add_credits_nudge_email_request(request_id, Err("local failure".into())); + chat.update_backend_banner(&response); + assert_eq!(render_bottom_popup(&chat, /*width*/ 70), initial); + chat.handle_key_event(KeyEvent::new(KeyCode::Esc, KeyModifiers::NONE)); + assert_eq!( + render_bottom_popup(&chat, /*width*/ 70).contains("Selected model usage exhausted"), + presentation != Some("dismissible") + ); + chat.set_model("test-model-b"); + assert!(!chat.has_applicable_backend_banner()); + assert!( + !render_bottom_popup(&chat, /*width*/ 70).contains("Selected model usage exhausted") + ); + chat.set_model("test-model-a"); + assert_eq!( + render_bottom_popup(&chat, /*width*/ 70).contains("Selected model usage exhausted"), + presentation != Some("dismissible") + ); + } +} + +#[tokio::test] +async fn backend_banner_zero_actions_preserve_guidance_and_composer_input() { + for presentation in [None, Some("inline"), Some("dismissible")] { + for ctas in [ + json!([]), + json!([{"action":"future_action","label":"Unsupported"}]), + ] { + let (mut chat, _rx, _ops) = make_chatwidget_manual(Some("test-model-a")).await; + chat.update_backend_banner(&banner_response(presentation, ctas)); + let rendered = render_bottom_popup(&chat, /*width*/ 70); + assert!(rendered.contains("Selected model usage exhausted")); + assert!(rendered.contains("switch to another model")); + assert!(!rendered.to_lowercase().contains("no matches")); + assert!(!rendered.contains("Press a number")); + assert_eq!( + rendered.contains("esc to dismiss"), + presentation == Some("dismissible") + ); + if presentation == Some("dismissible") { + insta::assert_snapshot!( + "backend_banner_information_dismissible", + normalize_snapshot_paths(rendered) + ); + } else { + insta::assert_snapshot!( + "backend_banner_information_only", + normalize_snapshot_paths(rendered) + ); + } + chat.handle_key_event(KeyEvent::new(KeyCode::Char('1'), KeyModifiers::NONE)); + // An ordinary navigation key flushes the composer's pending first-character buffer. + chat.handle_key_event(KeyEvent::new(KeyCode::Left, KeyModifiers::NONE)); + assert_eq!(chat.composer_text_with_pending(), "1"); + } + } +} + +#[tokio::test] +async fn backend_banner_dismissal_tracks_occurrence_not_copy_or_model() { + let (mut chat, _rx, _ops) = make_chatwidget_manual(Some("test-model-a")).await; + let mut response = banner_response(Some("dismissible"), json!([])); + chat.update_backend_banner(&response); + assert!(render_bottom_popup(&chat, /*width*/ 70).contains("Selected model usage exhausted")); + chat.handle_key_event(KeyEvent::new(KeyCode::Esc, KeyModifiers::NONE)); + chat.set_model("test-model-b"); + response.rate_limit_upsell.as_mut().unwrap()["description"] = json!("Updated backend copy"); + chat.update_backend_banner(&response); + chat.set_model("test-model-a"); + assert!(!render_bottom_popup(&chat, /*width*/ 70).contains("Updated backend copy")); + response.rate_limit_upsell.as_mut().unwrap()["reset_at"] = json!(2000000000); + chat.update_backend_banner(&response); + assert!(render_bottom_popup(&chat, /*width*/ 70).contains("Updated backend copy")); + chat.handle_key_event(KeyEvent::new(KeyCode::Esc, KeyModifiers::NONE)); + let mut absent = response.clone(); + absent.rate_limit_upsell = None; + chat.update_backend_banner(&absent); + chat.update_backend_banner(&response); + assert!(render_bottom_popup(&chat, /*width*/ 70).contains("Updated backend copy")); +} + +#[tokio::test] +async fn backend_banner_occurrence_uses_explicit_or_legacy_source_model() { + for explicit_source in [false, true] { + let (mut chat, _rx, _ops) = make_chatwidget_manual(Some("test-model-a")).await; + let mut response = banner_response(Some("dismissible"), json!([])); + if explicit_source { + response.rate_limit_upsell.as_mut().unwrap()["blocked_model_slug"] = + json!("test-model-a"); + } + chat.update_backend_banner(&response); + assert!( + render_bottom_popup(&chat, /*width*/ 70).contains("Selected model usage exhausted") + ); + chat.handle_key_event(KeyEvent::new(KeyCode::Esc, KeyModifiers::NONE)); + response.rate_limit_upsell.as_mut().unwrap()["model_slug"] = json!("test-model-b"); + chat.update_backend_banner(&response); + chat.set_model("test-model-b"); + assert_eq!( + render_bottom_popup(&chat, /*width*/ 70).contains("Selected model usage exhausted"), + !explicit_source + ); + } +} + +#[tokio::test] +async fn backend_banner_turn_on_another_model_preserves_hidden_occurrence() { + let (mut chat, _rx, mut ops) = make_chatwidget_manual(Some("test-model-a")).await; + chat.thread_id = Some(ThreadId::new()); + chat.update_backend_banner(&banner_response(Some("dismissible"), json!([]))); + assert!(render_bottom_popup(&chat, /*width*/ 70).contains("Selected model usage exhausted")); + chat.set_model("test-model-b"); + assert!(!render_bottom_popup(&chat, /*width*/ 70).contains("Selected model usage exhausted")); + chat.submit_user_message(UserMessage::from("hello")); + assert!( + ops.try_recv() + .is_ok_and(|op| matches!(op, Op::UserTurn { .. })) + ); + handle_turn_started(&mut chat, "turn-1"); + handle_turn_completed(&mut chat, "turn-1", /*duration_ms*/ None); + chat.set_model("test-model-a"); + assert!(render_bottom_popup(&chat, /*width*/ 70).contains("Selected model usage exhausted")); +} + +#[tokio::test] +async fn backend_banner_restores_only_programmatically_displaced_switch_prompt() { + for user_dismissed in [false, true] { + let (mut chat, _rx, _ops) = make_chatwidget_manual(Some("gpt-5")).await; + chat.has_chatgpt_account = true; + chat.on_rate_limit_snapshot(Some(snapshot(/*percent*/ 95.0))); + chat.maybe_show_pending_rate_limit_prompt(); + assert!(render_bottom_popup(&chat, /*width*/ 90).contains("Approaching rate limits")); + if user_dismissed { + chat.handle_key_event(KeyEvent::new(KeyCode::Esc, KeyModifiers::NONE)); + } + let mut response = banner_response(Some("inline"), json!([])); + response.rate_limit_upsell.as_mut().unwrap()["model_slug"] = json!("gpt-5"); + chat.update_backend_banner(&response); + assert!( + render_bottom_popup(&chat, /*width*/ 90).contains("Selected model usage exhausted") + ); + response.rate_limit_upsell = None; + chat.update_backend_banner(&response); + assert_eq!( + render_bottom_popup(&chat, /*width*/ 90).contains("Approaching rate limits"), + !user_dismissed + ); + } +} + +#[tokio::test] +async fn owner_notification_completion_cannot_cross_account_change() { + let (mut chat, mut rx, _ops) = make_chatwidget_manual(/*model_override*/ None).await; + let previous = chat + .start_add_credits_nudge_email_request(AddCreditsNudgeCreditType::Credits) + .expect("start previous account request"); + chat.update_account_state( + /*status_account_display*/ None, /*plan_type*/ None, + /*has_chatgpt_account*/ true, /*has_codex_backend_auth*/ true, + ); + let current = chat + .start_add_credits_nudge_email_request(AddCreditsNudgeCreditType::UsageLimit) + .expect("new account must be actionable"); + drain_insert_history(&mut rx); + chat.finish_add_credits_nudge_email_request(previous, Ok(AddCreditsNudgeEmailStatus::Sent)); + assert!(drain_insert_history(&mut rx).is_empty()); + assert!( + chat.start_add_credits_nudge_email_request(AddCreditsNudgeCreditType::UsageLimit) + .is_none() + ); + chat.finish_add_credits_nudge_email_request(current, Ok(AddCreditsNudgeEmailStatus::Sent)); + let rendered = drain_insert_history(&mut rx) + .into_iter() + .map(|lines| lines_to_single_string(&lines)) + .collect::(); + insta::assert_snapshot!("owner_notification_after_account_change", rendered); +} + +#[tokio::test] +async fn backend_banner_new_turn_dismisses_only_shown_dismissible_content() { + for (presentation, show_before_submit) in [ + (None, true), + (Some("inline"), true), + (Some("dismissible"), true), + (Some("dismissible"), false), + ] { + let (mut chat, _rx, mut ops) = make_chatwidget_manual(Some("test-model-a")).await; + chat.thread_id = Some(ThreadId::new()); + chat.update_backend_banner(&banner_response(presentation, json!([]))); + if show_before_submit { + assert!( + render_bottom_popup(&chat, /*width*/ 70).contains("Selected model usage exhausted") + ); + } + chat.submit_user_message(UserMessage::from("hello")); + assert!( + ops.try_recv() + .is_ok_and(|op| matches!(op, Op::UserTurn { .. })) + ); + handle_turn_started(&mut chat, "turn-1"); + handle_turn_completed(&mut chat, "turn-1", /*duration_ms*/ None); + assert_eq!( + render_bottom_popup(&chat, /*width*/ 70).contains("Selected model usage exhausted"), + !(presentation == Some("dismissible") && show_before_submit) + ); + } +} + +#[tokio::test] +async fn backend_banner_invalid_content_and_absence_restore_fallback() { + for replacement in [ + serde_json::Value::Null, + json!({"presentation":"future_mode"}), + json!({"presentation":null}), + json!({"title":" "}), + ] { + let (mut chat, _rx, _ops) = make_chatwidget_manual(Some("test-model-a")).await; + let mut response = banner_response(Some("inline"), json!([])); + chat.update_backend_banner(&response); + assert!( + render_bottom_popup(&chat, /*width*/ 70).contains("Selected model usage exhausted") + ); + if replacement.is_null() { + response.rate_limit_upsell = None; + } else { + for (key, value) in replacement.as_object().unwrap() { + response.rate_limit_upsell.as_mut().unwrap()[key.as_str()] = value.clone(); + } + } + chat.update_backend_banner(&response); + assert!(!chat.has_applicable_backend_banner()); + chat.codex_rate_limit_reached_type = + Some(RateLimitReachedType::WorkspaceMemberCreditsDepleted); + chat.on_rate_limit_error(RateLimitErrorKind::Generic, "limit".into()); + assert!(render_bottom_popup(&chat, /*width*/ 90).contains("workspace owner")); + } +} + +#[tokio::test] +async fn backend_banner_fallback_candidates_and_notice_follow_selected_model() { + let (mut chat, _events, _ops) = make_chatwidget_manual(Some("test-model-a")).await; + chat.has_chatgpt_account = true; + let template = chat.model_catalog.try_list_models().unwrap()[0].clone(); + let models = ["hidden-model", "test-model-b", "test-model-c"].map(|model| ModelPreset { + model: model.into(), + show_in_picker: model != "hidden-model", + ..template.clone() + }); + chat.model_catalog = Arc::new(ModelCatalog::new(models.to_vec())); + let mut response = banner_response(Some("inline"), json!([])); + response.rate_limit_upsell.as_mut().unwrap()["blocked_model_slug"] = json!("test-model-a"); + response.rate_limit_upsell.as_mut().unwrap()["fallback_model_slugs"] = + json!(["hidden-model", "test-model-c", "test-model-b"]); + chat.update_backend_banner(&response); + assert_eq!(chat.backend_banner_fallback(), Some(models[2].clone())); + // A retained ChatGPT login must not change a task using a custom provider. + chat.config.model_provider.requires_openai_auth = false; + assert_eq!(chat.backend_banner_fallback(), None); + chat.config.model_provider.requires_openai_auth = true; + let mut mode = chat.effective_collaboration_mode(); + mode.settings.model = "test-model-c".into(); + chat.finish_backend_banner_fallback(mode); + let before = render_bottom_popup(&chat, /*width*/ 70); + assert!(before.contains("Selected model usage exhausted")); + chat.handle_key_event(KeyEvent::new(KeyCode::Esc, KeyModifiers::NONE)); + assert!(render_bottom_popup(&chat, /*width*/ 70).contains("Selected model usage exhausted")); + assert_eq!(chat.backend_banner_fallback(), None); + let (mut other_task, _events, _ops) = make_chatwidget_manual(Some("test-model-c")).await; + other_task.inherit_backend_banner_state(&mut chat); + assert!( + render_bottom_popup(&other_task, /*width*/ 70).contains("Selected model usage exhausted") + ); + other_task.set_model("test-model-a"); + assert!( + !render_bottom_popup(&other_task, /*width*/ 70).contains("Selected model usage exhausted") + ); + other_task.set_model("unrelated-model"); + assert!( + !render_bottom_popup(&other_task, /*width*/ 70).contains("Selected model usage exhausted") + ); + other_task.set_model("test-model-c"); + assert!( + render_bottom_popup(&other_task, /*width*/ 70).contains("Selected model usage exhausted") + ); +} + +#[tokio::test] +async fn backend_banner_sparse_updates_preserve_visible_and_dismissed_occurrences() { + for dismiss in [false, true] { + let (mut chat, _events, _ops) = make_chatwidget_manual(Some("test-model-a")).await; + chat.update_backend_banner(&banner_response(Some("dismissible"), json!([]))); + assert!( + render_bottom_popup(&chat, /*width*/ 70).contains("Selected model usage exhausted") + ); + if dismiss { + chat.handle_key_event(KeyEvent::new(KeyCode::Esc, KeyModifiers::NONE)); + } + let before = render_bottom_popup(&chat, /*width*/ 70); + chat.on_rolling_rate_limit_snapshot(snapshot(/*percent*/ 60.0)); + assert_eq!(render_bottom_popup(&chat, /*width*/ 70), before); + // A model-scoped banner can coexist with an absent aggregate reached type. + let mut exhausted = snapshot(/*percent*/ 100.0); + exhausted.rate_limit_reached_type = + Some(RateLimitReachedType::WorkspaceMemberCreditsDepleted); + chat.on_rolling_rate_limit_snapshot(exhausted); + assert_eq!(render_bottom_popup(&chat, /*width*/ 70), before); + } +} + +#[tokio::test] +async fn backend_banner_changed_remedy_keeps_fallback_until_applicable_replacement() { + for rolling_update in [false, true] { + let (mut chat, _events, _ops) = make_chatwidget_manual(Some("test-model-a")).await; + let mut credits = snapshot(/*percent*/ 100.0); + credits.rate_limit_reached_type = + Some(RateLimitReachedType::WorkspaceMemberCreditsDepleted); + chat.on_rate_limit_snapshot(Some(credits)); + let mut response = banner_response( + Some("inline"), + json!([{"action":"notify_owner","label":"Notify owner"}]), + ); + chat.update_backend_banner(&response); + assert!(render_bottom_popup(&chat, /*width*/ 90).contains("Notify owner")); + let mut cap = snapshot(/*percent*/ 100.0); + cap.rate_limit_reached_type = Some(RateLimitReachedType::WorkspaceMemberUsageLimitReached); + if rolling_update { + chat.on_rolling_rate_limit_snapshot(cap); + } + chat.on_rate_limit_error(RateLimitErrorKind::UsageLimit, "Usage cap reached".into()); + assert!( + render_bottom_popup(&chat, /*width*/ 90) + .contains("Request a limit increase from your owner") + ); + response.rate_limit_upsell.as_mut().unwrap()["title"] = + json!("Workspace spending cap reached"); + response.rate_limit_upsell.as_mut().unwrap()["ctas"] = + json!([{"action":"request_increase","label":"Request more usage"}]); + chat.update_backend_banner(&response); + let rendered = render_bottom_popup(&chat, /*width*/ 90); + assert!( + rendered.contains("Workspace spending cap reached"), + "{rendered}" + ); + assert!(rendered.contains("Request more usage")); + assert!(!rendered.contains("Request a limit increase from your owner")); + chat.set_model("test-model-b"); + chat.on_rate_limit_error(RateLimitErrorKind::UsageLimit, "Usage cap reached".into()); + assert!( + render_bottom_popup(&chat, /*width*/ 90) + .contains("Request a limit increase from your owner") + ); + } +} diff --git a/codex-rs/tui/src/chatwidget/tests/helpers.rs b/codex-rs/tui/src/chatwidget/tests/helpers.rs index 73a33d83a7..33c46c33de 100644 --- a/codex-rs/tui/src/chatwidget/tests/helpers.rs +++ b/codex-rs/tui/src/chatwidget/tests/helpers.rs @@ -35,7 +35,7 @@ pub(super) fn truncated_path_variants(path: &str) -> Vec { .collect() } -pub(super) fn normalize_snapshot_paths(text: impl Into) -> String { +pub(crate) fn normalize_snapshot_paths(text: impl Into) -> String { let mut text = text.into(); for unix_path in ["/tmp/project", "/tmp/hooks.json"] { diff --git a/codex-rs/tui/src/chatwidget/tests/rate_limit_recovery_tests.rs b/codex-rs/tui/src/chatwidget/tests/rate_limit_recovery_tests.rs new file mode 100644 index 0000000000..53d61827d5 --- /dev/null +++ b/codex-rs/tui/src/chatwidget/tests/rate_limit_recovery_tests.rs @@ -0,0 +1,65 @@ +use super::*; +use pretty_assertions::assert_eq; + +#[tokio::test] +async fn rate_limit_recovery_holds_submissions_until_model_change() { + let (mut chat, mut events, mut ops) = make_chatwidget_manual(Some("test-model-a")).await; + set_chatgpt_auth(&mut chat); + chat.thread_id = Some(ThreadId::new()); + handle_turn_started(&mut chat, "failed-turn"); + chat.queue_user_message(UserMessage::from("queued follow-up")); + chat.on_rate_limit_error(RateLimitErrorKind::UsageLimit, "Usage exhausted".into()); + assert!( + std::iter::from_fn(|| events.try_recv().ok()).any(|event| matches!( + event, + AppEvent::RefreshRateLimits { + origin: crate::app_event::RateLimitRefreshOrigin::Recovery + } + )) + ); + chat.submit_user_message(UserMessage::from("submitted during recovery")); + assert_no_submit_op(&mut ops); + assert_eq!( + chat.queued_user_message_texts(), + vec!["queued follow-up", "submitted during recovery"] + ); + + chat.set_model("test-model-b"); + chat.finish_rate_limit_recovery(); + let Op::UserTurn { model, items, .. } = next_submit_op(&mut ops) else { + panic!("expected queued follow-up on the fallback model"); + }; + assert_eq!(model, "test-model-b"); + assert!( + matches!(items.as_slice(), [UserInput::Text { text, .. }] if text == "queued follow-up") + ); + assert_eq!( + chat.queued_user_message_texts(), + vec!["submitted during recovery"] + ); + chat.finish_rate_limit_recovery(); + assert_no_submit_op(&mut ops); +} + +#[tokio::test] +async fn rate_limit_recovery_preserves_settings_hold_and_clears_on_account_change() { + let (mut chat, _events, mut ops) = make_chatwidget_manual(Some("test-model-a")).await; + set_chatgpt_auth(&mut chat); + chat.thread_id = Some(ThreadId::new()); + chat.set_queue_autosend_suppressed(/*suppressed*/ true); + chat.on_rate_limit_error(RateLimitErrorKind::UsageLimit, "Usage exhausted".into()); + chat.queue_user_message(UserMessage::from("queued follow-up")); + chat.finish_rate_limit_recovery(); + assert_no_submit_op(&mut ops); + assert!(chat.input_queue.suppress_queue_autosend); + assert!(!chat.input_queue.rate_limit_recovery_pending); + + chat.on_rate_limit_error(RateLimitErrorKind::UsageLimit, "Usage exhausted".into()); + chat.update_account_state( + /*status_account_display*/ None, /*plan_type*/ None, + /*has_chatgpt_account*/ false, /*has_codex_backend_auth*/ false, + ); + assert!(!chat.input_queue.rate_limit_recovery_pending); + assert_eq!(chat.queued_user_message_texts(), vec!["queued follow-up"]); + assert_no_submit_op(&mut ops); +} diff --git a/codex-rs/tui/src/chatwidget/tests/snapshots/codex_tui__chatwidget__tests__backend_banners_tests__backend_banner_information_dismissible.snap b/codex-rs/tui/src/chatwidget/tests/snapshots/codex_tui__chatwidget__tests__backend_banners_tests__backend_banner_information_dismissible.snap new file mode 100644 index 0000000000..dd73e1cfe1 --- /dev/null +++ b/codex-rs/tui/src/chatwidget/tests/snapshots/codex_tui__chatwidget__tests__backend_banners_tests__backend_banner_information_dismissible.snap @@ -0,0 +1,14 @@ +--- +source: tui/src/chatwidget/tests/backend_banners_tests.rs +assertion_line: 66 +expression: rendered +--- + Selected model usage exhausted + Ask your owner for credits or switch to another model. + + esc to dismiss · type to continue + + +› Ask Codex to do anything + + test-model-a default · /tmp/project diff --git a/codex-rs/tui/src/chatwidget/tests/snapshots/codex_tui__chatwidget__tests__backend_banners_tests__backend_banner_information_only.snap b/codex-rs/tui/src/chatwidget/tests/snapshots/codex_tui__chatwidget__tests__backend_banners_tests__backend_banner_information_only.snap new file mode 100644 index 0000000000..af451575ef --- /dev/null +++ b/codex-rs/tui/src/chatwidget/tests/snapshots/codex_tui__chatwidget__tests__backend_banners_tests__backend_banner_information_only.snap @@ -0,0 +1,12 @@ +--- +source: tui/src/chatwidget/tests/backend_banners_tests.rs +assertion_line: 62 +expression: rendered +--- + Selected model usage exhausted + Ask your owner for credits or switch to another model. + + +› Ask Codex to do anything + + test-model-a default · /tmp/project diff --git a/codex-rs/tui/src/chatwidget/tests/snapshots/codex_tui__chatwidget__tests__backend_banners_tests__backend_banner_notification.snap b/codex-rs/tui/src/chatwidget/tests/snapshots/codex_tui__chatwidget__tests__backend_banners_tests__backend_banner_notification.snap new file mode 100644 index 0000000000..7f16786846 --- /dev/null +++ b/codex-rs/tui/src/chatwidget/tests/snapshots/codex_tui__chatwidget__tests__backend_banners_tests__backend_banner_notification.snap @@ -0,0 +1,15 @@ +--- +source: tui/src/chatwidget/tests/backend_banners_tests.rs +assertion_line: 50 +expression: "render_bottom_popup(&chat, 70)" +--- + Selected model usage exhausted + Ask your owner for credits or switch to another model. + +› 1. Notify owner + + Press a number to choose + +› Ask Codex to do anything + + test-model-a default · /tmp/project diff --git a/codex-rs/tui/src/chatwidget/tests/snapshots/codex_tui__chatwidget__tests__backend_banners_tests__owner_notification_after_account_change.snap b/codex-rs/tui/src/chatwidget/tests/snapshots/codex_tui__chatwidget__tests__backend_banners_tests__owner_notification_after_account_change.snap new file mode 100644 index 0000000000..94013f0814 --- /dev/null +++ b/codex-rs/tui/src/chatwidget/tests/snapshots/codex_tui__chatwidget__tests__backend_banners_tests__owner_notification_after_account_change.snap @@ -0,0 +1,5 @@ +--- +source: tui/src/chatwidget/tests/backend_banners_tests.rs +expression: rendered +--- +• Limit increase requested. diff --git a/codex-rs/tui/src/chatwidget/tests/status_and_layout.rs b/codex-rs/tui/src/chatwidget/tests/status_and_layout.rs index a283433b1f..6b72898912 100644 --- a/codex-rs/tui/src/chatwidget/tests/status_and_layout.rs +++ b/codex-rs/tui/src/chatwidget/tests/status_and_layout.rs @@ -1918,8 +1918,10 @@ async fn workspace_owner_credits_nudge_completion_renders_feedback() { let mut rendered_cases = Vec::new(); for (result, expected) in cases { let (mut chat, mut rx, _op_rx) = make_chatwidget_manual(/*model_override*/ None).await; - chat.start_add_credits_nudge_email_request(AddCreditsNudgeCreditType::Credits); - chat.finish_add_credits_nudge_email_request(result); + let request_id = chat + .start_add_credits_nudge_email_request(AddCreditsNudgeCreditType::Credits) + .expect("start notification"); + chat.finish_add_credits_nudge_email_request(request_id, result); let rendered = drain_insert_history(&mut rx) .into_iter() .map(|lines| lines_to_single_string(&lines)) @@ -1954,14 +1956,24 @@ async fn workspace_owner_usage_limit_nudge_completion_renders_feedback() { let mut rendered_cases = Vec::new(); for (result, expected) in cases { let (mut chat, mut rx, _op_rx) = make_chatwidget_manual(/*model_override*/ None).await; - chat.start_add_credits_nudge_email_request(AddCreditsNudgeCreditType::UsageLimit); - chat.finish_add_credits_nudge_email_request(result); + let request_id = chat + .start_add_credits_nudge_email_request(AddCreditsNudgeCreditType::UsageLimit) + .expect("start notification"); + assert!( + chat.start_add_credits_nudge_email_request(AddCreditsNudgeCreditType::Credits) + .is_none() + ); + chat.finish_add_credits_nudge_email_request(request_id, result); let rendered = drain_insert_history(&mut rx) .into_iter() .map(|lines| lines_to_single_string(&lines)) .collect::(); assert!(rendered.contains(expected), "rendered: {rendered}"); rendered_cases.push(rendered); + assert!( + chat.start_add_credits_nudge_email_request(AddCreditsNudgeCreditType::Credits) + .is_some() + ); } assert_chatwidget_snapshot!( diff --git a/codex-rs/tui/src/chatwidget/turn_runtime.rs b/codex-rs/tui/src/chatwidget/turn_runtime.rs index dcf29f8739..3d9e698e1b 100644 --- a/codex-rs/tui/src/chatwidget/turn_runtime.rs +++ b/codex-rs/tui/src/chatwidget/turn_runtime.rs @@ -398,6 +398,8 @@ impl ChatWidget { } pub(super) fn on_rate_limit_error(&mut self, error_kind: RateLimitErrorKind, message: String) { + // on_error can drain queued input, before the asynchronous recovery read completes. + self.input_queue.rate_limit_recovery_pending = self.has_chatgpt_account; let usage_limit_error = matches!(error_kind, RateLimitErrorKind::UsageLimit); let rate_limit_reached_type = self.codex_rate_limit_reached_type.map(|kind| { if usage_limit_error { @@ -414,31 +416,38 @@ impl ChatWidget { kind } }); + if self.codex_rate_limit_reached_type != rate_limit_reached_type { + self.clear_backend_banner(); + } self.codex_rate_limit_reached_type = rate_limit_reached_type; - match rate_limit_reached_type { - Some(RateLimitReachedType::WorkspaceOwnerCreditsDepleted) => { - self.on_error( + // Keep owner remediation in history even when the optional backend banner is unavailable. + let (message, nudge) = match rate_limit_reached_type { + Some(RateLimitReachedType::WorkspaceOwnerCreditsDepleted) => ( "You're out of credits. Your workspace is out of credits. Add credits to continue using Codex." .to_string(), - ); - } - Some(RateLimitReachedType::WorkspaceOwnerUsageLimitReached) => { - self.on_error( + None, + ), + Some(RateLimitReachedType::WorkspaceOwnerUsageLimitReached) => ( "Usage limit reached. You've reached your usage limit. Increase your limits to continue using codex." .to_string(), - ); - } - Some(RateLimitReachedType::WorkspaceMemberCreditsDepleted) => { - self.on_error(message); - self.open_workspace_owner_nudge_prompt(AddCreditsNudgeCreditType::Credits); - } - Some(RateLimitReachedType::WorkspaceMemberUsageLimitReached) => { - self.on_error(message); - self.open_workspace_owner_nudge_prompt(AddCreditsNudgeCreditType::UsageLimit); - } - Some(RateLimitReachedType::RateLimitReached) | None => { - self.on_error(message); - } + None, + ), + Some(RateLimitReachedType::WorkspaceMemberCreditsDepleted) => + (message, Some(AddCreditsNudgeCreditType::Credits)), + Some(RateLimitReachedType::WorkspaceMemberUsageLimitReached) => + (message, Some(AddCreditsNudgeCreditType::UsageLimit)), + Some(RateLimitReachedType::RateLimitReached) | None => (message, None), + }; + self.on_error(message); + if !self.has_applicable_backend_banner() + && let Some(credit_type) = nudge + { + self.open_workspace_owner_nudge_prompt(credit_type); + } + if self.has_chatgpt_account { + self.app_event_tx.send(AppEvent::RefreshRateLimits { + origin: crate::app_event::RateLimitRefreshOrigin::Recovery, + }); } } diff --git a/codex-rs/tui/src/lib.rs b/codex-rs/tui/src/lib.rs index 9ca0d639bd..5cbf403654 100644 --- a/codex-rs/tui/src/lib.rs +++ b/codex-rs/tui/src/lib.rs @@ -106,6 +106,7 @@ mod app_server_approval_conversions; mod app_server_session; mod approval_events; mod ascii_animation; +mod backend_banners; mod bottom_pane; mod branch_summary; mod chatwidget; diff --git a/codex-rs/tui/src/status/mod.rs b/codex-rs/tui/src/status/mod.rs index 8dfced4d75..43959526fa 100644 --- a/codex-rs/tui/src/status/mod.rs +++ b/codex-rs/tui/src/status/mod.rs @@ -23,6 +23,7 @@ pub(crate) use card::new_status_output_with_rate_limits; pub(crate) use card::new_status_output_with_rate_limits_handle; pub(crate) use helpers::compose_agents_summary; pub(crate) use helpers::format_directory_display; +pub(crate) use helpers::format_reset_timestamp; pub(crate) use helpers::format_tokens_compact; pub(crate) use helpers::plan_type_display_name; pub(crate) use rate_limits::RateLimitSnapshotDisplay;