From 59a2f0d01f7141a1c971aafad927a7b789f4315a Mon Sep 17 00:00:00 2001 From: t Date: Mon, 7 Sep 2026 01:55:06 +0900 Subject: [PATCH 1/2] fix(quota): align Antigravity probes with fixed outbound destinations --- .../src/content/docs/fr/guides/providers.md | 3 + .../src/content/docs/guides/providers.md | 3 + .../src/content/docs/ja/guides/providers.md | 3 + .../src/content/docs/ko/guides/providers.md | 3 + .../src/content/docs/ru/guides/providers.md | 3 + .../src/content/docs/tr/guides/providers.md | 3 + .../content/docs/zh-cn/guides/providers.md | 3 + .../content/docs/zh-tw/guides/providers.md | 3 + src/providers/quota.ts | 41 ++- .../providers/provider-account-quota.test.ts | 106 ++++++- tests/providers/provider-quota.test.ts | 264 ++++++++++++++++-- 11 files changed, 392 insertions(+), 43 deletions(-) diff --git a/docs-site/src/content/docs/fr/guides/providers.md b/docs-site/src/content/docs/fr/guides/providers.md index 5de4260813..988ca03cf7 100644 --- a/docs-site/src/content/docs/fr/guides/providers.md +++ b/docs-site/src/content/docs/fr/guides/providers.md @@ -124,6 +124,9 @@ ocx logout | `cursor` | `cursor` | `https://api2.cursor.sh` | Connexion PKCE expérimentale, transport HTTP/2 en direct et découverte de modèles filtrés par compte. | | `github-copilot` | `openai-chat` | `https://api.githubcopilot.com` | Expérimental. Flux d'appareil GitHub et échange `copilot_internal` (client OAuth de VS Code). Nécessite un abonnement Copilot actif ; il ne s'agit pas d'une API tierce officielle. | +Les vérifications de quota Google Antigravity utilisent des points de terminaison Google fixes, y compris le repli vers la liste des modèles. Elles prennent en charge le DNS Fake-IP transparent pour ces destinations en conservant la vérification TLS, le refus des redirections et les contrôles des adresses privées. Une URL de base personnalisée ne modifie que les requêtes de modèles ; `NO_PROXY` conserve la politique de connexion directe. + + Après un échec définitif d'actualisation de Nous, exécutez `ocx login nous` pour vous réauthentifier. Pour les préréglages canoniques du forfait Kimi Coding (`kimi` pour la connexion au compte et `kimi-code` diff --git a/docs-site/src/content/docs/guides/providers.md b/docs-site/src/content/docs/guides/providers.md index 255c0d8dc4..05f586a816 100644 --- a/docs-site/src/content/docs/guides/providers.md +++ b/docs-site/src/content/docs/guides/providers.md @@ -125,6 +125,9 @@ ocx logout | `cursor` | `cursor` | `https://api2.cursor.sh` | Experimental PKCE login, live HTTP/2 transport with an opt-in HTTP/1.1 compatibility path, and account-filtered model discovery. | | `github-copilot` | `openai-chat` | `https://api.githubcopilot.com` | Experimental. GitHub device flow + `copilot_internal` exchange (VS Code OAuth client). Requires an active Copilot subscription; not an official third-party API. | +Google Antigravity account and provider quota probes use fixed Google accounting endpoints, including the models fallback. They support transparent Fake-IP DNS for those destinations while retaining TLS verification, redirect rejection and private-address checks. A custom provider base URL changes model requests, not quota destinations; `NO_PROXY` continues to select the direct-route policy. + + After a terminal Nous refresh failure, run `ocx login nous` to reauthenticate. For the canonical Kimi Coding Plan presets (`kimi` account login and `kimi-code` API key), diff --git a/docs-site/src/content/docs/ja/guides/providers.md b/docs-site/src/content/docs/ja/guides/providers.md index 51d018f478..33be9fc694 100644 --- a/docs-site/src/content/docs/ja/guides/providers.md +++ b/docs-site/src/content/docs/ja/guides/providers.md @@ -114,6 +114,9 @@ ocx logout | `cursor` | `cursor` | `https://api2.cursor.sh` | 実験的 PKCE ログイン、HTTP/2 トランスポート、アカウント別モデル探索をサポート。 | | `github-copilot` | `openai-chat` | `https://api.githubcopilot.com` | 実験的。GitHub デバイスフロー + `copilot_internal` 交換(VS Code OAuth クライアント)。有効な Copilot サブスクリプションが必要で、公式のサードパーティ API ではありません。 | +Google Antigravity のアカウント・プロバイダーのクォータ確認は、モデル一覧へのフォールバックも含め、固定の Google エンドポイントを使用します。その宛先では透過 Fake-IP DNS に対応し、TLS 検証、リダイレクト拒否、プライベートアドレス検査を維持します。カスタム base URL はモデル要求にのみ適用されます。`NO_PROXY` は直接接続のポリシーを維持します。 + + Nous の refresh が終端失敗した場合は、再認証に `ocx login nous` を実行してください。 正規の Kimi Coding Plan プリセット(`kimi` アカウントログインと `kimi-code` API key)では、 diff --git a/docs-site/src/content/docs/ko/guides/providers.md b/docs-site/src/content/docs/ko/guides/providers.md index 3c28be0a59..7781cc4f52 100644 --- a/docs-site/src/content/docs/ko/guides/providers.md +++ b/docs-site/src/content/docs/ko/guides/providers.md @@ -113,6 +113,9 @@ ocx logout | `cursor` | `cursor` | `https://api2.cursor.sh` | 실험적 PKCE 로그인, HTTP/2 전송, 계정별 모델 탐색을 지원합니다. | | `github-copilot` | `openai-chat` | `https://api.githubcopilot.com` | 실험적. GitHub 디바이스 플로우 + `copilot_internal` 교환(VS Code OAuth 클라이언트). 활성 Copilot 구독 필요; 공식 서드파티 API가 아닙니다. | +Google Antigravity 계정·제공자 할당량 확인은 모델 목록 폴백을 포함해 고정된 Google 회계 엔드포인트를 사용합니다. 해당 목적지의 투명 Fake-IP DNS를 지원하며 TLS 검증, 리다이렉트 거부, 사설 주소 검사는 유지합니다. 사용자 지정 base URL은 모델 요청에만 적용되며 할당량 목적지는 바꾸지 않습니다. `NO_PROXY`는 기존 직접 연결 정책을 유지합니다. + + Nous refresh가 종료 실패한 경우, `ocx login nous`로 재인증하세요. 정식 Kimi Coding Plan 프리셋(`kimi` 계정 로그인과 `kimi-code` API key)의 경우, opencodex는 diff --git a/docs-site/src/content/docs/ru/guides/providers.md b/docs-site/src/content/docs/ru/guides/providers.md index b99eb88ec2..b057cf77c6 100644 --- a/docs-site/src/content/docs/ru/guides/providers.md +++ b/docs-site/src/content/docs/ru/guides/providers.md @@ -123,6 +123,9 @@ ocx logout | `cursor` | `cursor` | `https://api2.cursor.sh` | Экспериментальный PKCE-вход, живой транспорт HTTP/2 и обнаружение моделей с фильтрацией по аккаунту. | | `github-copilot` | `openai-chat` | `https://api.githubcopilot.com` | Экспериментально. Device flow GitHub + обмен `copilot_internal` (OAuth-клиент VS Code). Требуется активная подписка Copilot; это не официальный сторонний API. | +Проверки квот аккаунтов и провайдера Google Antigravity используют фиксированные адреса Google, включая резервный запрос списка моделей. Для этих адресов поддерживается прозрачный Fake-IP DNS с сохранением проверки TLS, запрета перенаправлений и проверки частных адресов. Пользовательский base URL меняет только запросы моделей; `NO_PROXY` сохраняет политику прямого подключения. + + После терминального сбоя обновления Nous выполните `ocx login nous`, чтобы пройти повторную аутентификацию. Для канонических пресетов Kimi Coding Plan (вход через аккаунт `kimi` и API-ключ `kimi-code`) diff --git a/docs-site/src/content/docs/tr/guides/providers.md b/docs-site/src/content/docs/tr/guides/providers.md index 4559133d43..c5564e74a1 100644 --- a/docs-site/src/content/docs/tr/guides/providers.md +++ b/docs-site/src/content/docs/tr/guides/providers.md @@ -138,6 +138,9 @@ ocx logout | `cursor` | `cursor` | `https://api2.cursor.sh` | Deneysel PKCE girişi, canlı HTTP/2 aktarımı ve hesap filtreli model keşfi. | | `github-copilot` | `openai-chat` | `https://api.githubcopilot.com` | Deneysel. GitHub cihaz akışı + `copilot_internal` değişimi (VS Code OAuth istemcisi). Aktif bir Copilot aboneliği gerektirir; resmi bir üçüncü taraf API değildir. | +Google Antigravity hesap ve sağlayıcı kota sorguları, model listesine geri dönüş dahil sabit Google uç noktalarını kullanır. Bu hedefler için şeffaf Fake-IP DNS desteklenirken TLS doğrulaması, yönlendirme reddi ve özel adres kontrolleri korunur. Özel base URL yalnızca model isteklerini değiştirir; `NO_PROXY` doğrudan bağlantı politikasını korur. + + Uç bir Nous yenileme hatasından sonra yeniden kimlik doğrulamak için `ocx login nous` çalıştırın. diff --git a/docs-site/src/content/docs/zh-cn/guides/providers.md b/docs-site/src/content/docs/zh-cn/guides/providers.md index a4bbab6186..3fb72a4e6a 100644 --- a/docs-site/src/content/docs/zh-cn/guides/providers.md +++ b/docs-site/src/content/docs/zh-cn/guides/providers.md @@ -104,6 +104,9 @@ ocx logout | `cursor` | `cursor` | `https://api2.cursor.sh` | 实验性 PKCE 登录、带可选 HTTP/1.1 兼容路径的 HTTP/2 传输,以及按账号筛选的模型发现。 | | `github-copilot` | `openai-chat` | `https://api.githubcopilot.com` | 实验性。GitHub 设备流 + `copilot_internal` 交换(VS Code OAuth 客户端)。需要有效的 Copilot 订阅;不是官方第三方 API。 | +Google Antigravity 账户和提供方的配额查询(包括模型列表回退)使用固定的 Google 计量端点。这些目标支持透明 Fake-IP DNS,同时保留 TLS 验证、重定向拒绝和私有地址检查。自定义 base URL 仅改变模型请求,不改变配额目标;`NO_PROXY` 仍使用直连策略。 + + Nous refresh 发生终止性失败后,请运行 `ocx login nous` 重新认证。 对于规范的 Kimi Coding Plan 预设(`kimi` 账号登录和 `kimi-code` API key),opencodex diff --git a/docs-site/src/content/docs/zh-tw/guides/providers.md b/docs-site/src/content/docs/zh-tw/guides/providers.md index 0c20867124..96cf91ccfb 100644 --- a/docs-site/src/content/docs/zh-tw/guides/providers.md +++ b/docs-site/src/content/docs/zh-tw/guides/providers.md @@ -112,6 +112,9 @@ ocx logout | `cursor` | `cursor` | `https://api2.cursor.sh` | 實驗性 PKCE 登入、即時 HTTP/2 transport 與按帳號篩選的模型探索。 | | `github-copilot` | `openai-chat` | `https://api.githubcopilot.com` | 實驗性。GitHub device flow + `copilot_internal` exchange(VS Code OAuth client)。需要有效 Copilot 訂閱;不是官方第三方 API。 | +Google Antigravity 帳戶與供應商的配額查詢(包括模型清單備援)使用固定的 Google 計量端點。這些目標支援透明 Fake-IP DNS,同時保留 TLS 驗證、重新導向拒絕與私有位址檢查。自訂 base URL 只改變模型請求,不改變配額目標;`NO_PROXY` 仍使用直連政策。 + + 終端 Nous refresh 失敗後,執行 `ocx login nous` 重新認證。 對 canonical Kimi Coding Plan preset(`kimi` 帳號登入與 `kimi-code` API key),opencodex 只會把 caller diff --git a/src/providers/quota.ts b/src/providers/quota.ts index bb35c7ead1..7136cd3c70 100644 --- a/src/providers/quota.ts +++ b/src/providers/quota.ts @@ -2607,11 +2607,22 @@ function parseAntigravityQuotaSummary(body: Record | null): Pro } const ANTIGRAVITY_ACCOUNT_QUOTA_BASE = "https://daily-cloudcode-pa.googleapis.com"; -let antigravityOutboundDependencies: ProviderOutboundDependencies = {}; +const ANTIGRAVITY_QUOTA_SUMMARY_URL = `${ANTIGRAVITY_ACCOUNT_QUOTA_BASE}/v1internal:retrieveUserQuotaSummary`; +const ANTIGRAVITY_QUOTA_MODELS_URL = `${ANTIGRAVITY_ACCOUNT_QUOTA_BASE}/v1internal:fetchAvailableModels`; -/** Test seam: inject resolver/pinned transport for the per-account Antigravity probe. */ +/** Only these fixed accounting destinations may use transparent Fake-IP DNS. */ +export function isCanonicalAntigravityQuotaUrl(name: string, url: string): boolean { + return name === "google-antigravity" + && (url === ANTIGRAVITY_QUOTA_SUMMARY_URL || url === ANTIGRAVITY_QUOTA_MODELS_URL); +} + +let antigravityOutboundDependencies: ProviderOutboundDependencies = { + isCanonicalUrl: isCanonicalAntigravityQuotaUrl, +}; + +/** Test seam: inject resolver/pinned transport for provider and per-account probes. */ export function setAntigravityAccountQuotaTransportForTests(dependencies: ProviderOutboundDependencies | null): void { - antigravityOutboundDependencies = dependencies ?? {}; + antigravityOutboundDependencies = { ...dependencies, isCanonicalUrl: isCanonicalAntigravityQuotaUrl }; } /** @@ -2622,7 +2633,7 @@ export function setAntigravityAccountQuotaTransportForTests(dependencies: Provid * A redirect or non-2xx yields null (unavailable), never a partial row. */ export async function fetchAntigravityUsageQuota(accessToken: string, projectId: string): Promise { - const summaryUrl = `${ANTIGRAVITY_ACCOUNT_QUOTA_BASE}/v1internal:retrieveUserQuotaSummary`; + const summaryUrl = ANTIGRAVITY_QUOTA_SUMMARY_URL; try { const summaryResponse = await providerOutboundPost("google-antigravity", { baseUrl: ANTIGRAVITY_ACCOUNT_QUOTA_BASE }, summaryUrl, { headers: { @@ -2644,7 +2655,7 @@ export async function fetchAntigravityUsageQuota(accessToken: string, projectId: // Fallback to fetchAvailableModels on error } - const url = `${ANTIGRAVITY_ACCOUNT_QUOTA_BASE}/v1internal:fetchAvailableModels`; + const url = ANTIGRAVITY_QUOTA_MODELS_URL; const response = await providerOutboundPost("google-antigravity", { baseUrl: ANTIGRAVITY_ACCOUNT_QUOTA_BASE }, url, { headers: { Accept: "application/json", @@ -2662,7 +2673,7 @@ export async function fetchAntigravityUsageQuota(accessToken: string, projectId: return { customWindows, updatedAt: Date.now() }; } -async function fetchAntigravityQuota(provider: string, config: OcxProviderConfig): Promise { +async function fetchAntigravityQuota(provider: string): Promise { const credential = getCredential("google-antigravity"); if (!credential?.projectId) return null; let accessToken: string; @@ -2671,13 +2682,12 @@ async function fetchAntigravityQuota(provider: string, config: OcxProviderConfig } catch { return null; } - const baseUrl = (config.baseUrl || ANTIGRAVITY_ACCOUNT_QUOTA_BASE).replace(/\/+$/, ""); - // The summary probe is pinned to Google's own host through the provider-outbound + // Both probes are pinned to Google's own host through the provider-outbound // transport, mirroring `fetchAntigravityUsageQuota` above: a configured `baseUrl` is a - // routing choice for requests, not a second source of Google's accounting, and this - // request carries the account bearer. - const summaryUrl = `${ANTIGRAVITY_ACCOUNT_QUOTA_BASE}/v1internal:retrieveUserQuotaSummary`; + // routing choice for requests, not a second source of Google's accounting, and these + // requests carry the account bearer. + const summaryUrl = ANTIGRAVITY_QUOTA_SUMMARY_URL; try { const summaryResponse = await providerOutboundPost("google-antigravity", { baseUrl: ANTIGRAVITY_ACCOUNT_QUOTA_BASE }, summaryUrl, { headers: { @@ -2701,8 +2711,8 @@ async function fetchAntigravityQuota(provider: string, config: OcxProviderConfig // Fallback on network/fetch error } - const response = await fetch(`${baseUrl}/v1internal:fetchAvailableModels`, { - method: "POST", + const url = ANTIGRAVITY_QUOTA_MODELS_URL; + const response = await providerOutboundPost("google-antigravity", { baseUrl: ANTIGRAVITY_ACCOUNT_QUOTA_BASE }, url, { headers: { Accept: "application/json", "Content-Type": "application/json", @@ -2711,7 +2721,8 @@ async function fetchAntigravityQuota(provider: string, config: OcxProviderConfig }, body: JSON.stringify({ project: credential.projectId }), signal: AbortSignal.timeout(REQUEST_TIMEOUT_MS), - }); + }, antigravityOutboundDependencies); + if (await providerRedirectError(response, url)) return null; if (!response.ok) return null; const customWindows = antigravityWindowsFromModels(asRecord(await readQuotaJson(response))); if (customWindows.length === 0) return null; @@ -2783,7 +2794,7 @@ async function maybeFetchProviderQuota( } if (provider.authMode === "oauth" && explicitAccountReader(name)) return await fetchExplicitCurrentQuota(name, provider, config); if (provider.authMode === "oauth" && name === "anthropic") return fetchAnthropicQuota(name); - if (provider.authMode === "oauth" && name === "google-antigravity") return fetchAntigravityQuota(name, provider); + if (provider.authMode === "oauth" && name === "google-antigravity") return await fetchAntigravityQuota(name); if (provider.authMode === "oauth" && name === "kiro") return fetchKiroQuota(name); // Passive providers (meta-muse): Meta publishes no quota endpoint, so there is no // probe to run — the row is the active account's last in-band observation. diff --git a/tests/providers/provider-account-quota.test.ts b/tests/providers/provider-account-quota.test.ts index 1855e92d66..989f55a410 100644 --- a/tests/providers/provider-account-quota.test.ts +++ b/tests/providers/provider-account-quota.test.ts @@ -15,6 +15,7 @@ import { supportsPerAccountQuota, providerOAuthAccountQuotaMode, } from "../../src/providers/quota"; +import { PROXY_ENV_KEYS } from "../../src/lib/proxy-env"; import { removeTreeWithRetry } from "../helpers/remove-tree"; const originalFetch = globalThis.fetch; @@ -681,7 +682,21 @@ describe("google-antigravity per-account quota (#1082)", () => { }); } - afterEach(() => setAntigravityAccountQuotaTransportForTests(null)); + const proxyKeys = PROXY_ENV_KEYS.flatMap(key => [key, key.toLowerCase()]); + const originalProxyEnv = Object.fromEntries(proxyKeys.map(key => [key, process.env[key]])); + const summaryUrl = "https://daily-cloudcode-pa.googleapis.com/v1internal:retrieveUserQuotaSummary"; + const modelsUrl = "https://daily-cloudcode-pa.googleapis.com/v1internal:fetchAvailableModels"; + + beforeEach(() => { + for (const key of proxyKeys) delete process.env[key]; + }); + afterEach(() => { + setAntigravityAccountQuotaTransportForTests(null); + for (const key of proxyKeys) { + if (originalProxyEnv[key] === undefined) delete process.env[key]; + else process.env[key] = originalProxyEnv[key]; + } + }); test("probes each account with its own bearer and project id on the fixed Google host using retrieveUserQuotaSummary", async () => { const expires = Date.now() + 60 * 60_000; @@ -748,6 +763,95 @@ describe("google-antigravity per-account quota (#1082)", () => { expect(byId[idA]!.quota!.customWindows![0]!.resetAt).toBeDefined(); }); + for (const fallback of [false, true]) { + test(`Fake-IP ${fallback ? "models fallback" : "summary"} keeps each account bearer and project separate`, async () => { + const expires = Date.now() + 3600_000; + await saveCredential("google-antigravity", { access: "agy-first", refresh: "r1", expires, projectId: "proj-first", accountId: "agy-a", email: "a@example.com" }); + await saveCredential("google-antigravity", { access: "agy-second", refresh: "r2", expires, projectId: "proj-second", accountId: "agy-b", email: "b@example.com" }); + let plainFetchCalls = 0; + globalThis.fetch = (async () => { plainFetchCalls += 1; throw new Error("unexpected raw quota fetch"); }) as typeof fetch; + const resolved: Array<{ url: string; benchmark?: boolean; private?: boolean; mihomo?: boolean }> = []; + const posted: Array<{ url: string; auth: string | null; project: string; address: string; tls?: boolean; signal: boolean }> = []; + setAntigravityAccountQuotaTransportForTests(null); + setAntigravityAccountQuotaTransportForTests({ + resolveAddresses: async (url, options) => { + const policy = typeof options === "object" ? options : undefined; + resolved.push({ url, benchmark: policy?.allowBenchmarkAddresses, private: policy?.allowPrivateNetwork, mihomo: policy?.allowMihomoIpv6FakeIp }); + if (!policy?.allowBenchmarkAddresses) throw new Error("benchmark address rejected"); + return { hostname: "daily-cloudcode-pa.googleapis.com", addresses: [{ address: "198.18.56.214", family: 4 }], privateNetwork: false }; + }, + pinnedPost: async (url, pinned, body, signal, options) => { + const auth = new Headers(options?.headers).get("authorization"); + posted.push({ url, auth, project: String(JSON.parse(body).project), address: pinned.address, tls: options?.rejectUnauthorized, signal: signal instanceof AbortSignal }); + if (url === summaryUrl && fallback) return new Response(null, { status: 404 }); + const [gem, cla]: [number, number] = auth === "Bearer agy-first" ? [0.86, 0.38] : [0.97, 0.91]; + return new Response(url === summaryUrl ? antigravitySummaryBody(gem, cla) : antigravityBody(gem, cla)); + }, + }); + const rows = await fetchProviderAccountQuotas("google-antigravity"); + const urls = fallback ? [summaryUrl, modelsUrl] : [summaryUrl]; + expect(resolved).toHaveLength(urls.length * 2); + expect(posted).toHaveLength(urls.length * 2); + for (const url of urls) { + expect(resolved.filter(row => row.url === url)).toEqual([ + { url, benchmark: true, private: false, mihomo: false }, + { url, benchmark: true, private: false, mihomo: false }, + ]); + } + for (const [auth, project] of [["Bearer agy-first", "proj-first"], ["Bearer agy-second", "proj-second"]]) { + expect(posted.filter(row => row.auth === auth)).toEqual(urls.map(url => ({ url, auth, project, address: "198.18.56.214", tls: true, signal: true }))); + } + const byId = Object.fromEntries(rows.map(row => [row.accountId, row])); + expect(byId[idFor("a@example.com")]?.quota?.customWindows?.map(w => w.percent)).toEqual(fallback ? [14, 62] : [14, 14, 62, 62]); + expect(byId[idFor("b@example.com")]?.quota?.customWindows?.map(w => w.percent)).toEqual(fallback ? [3, 9] : [3, 3, 9, 9]); + expect(plainFetchCalls).toBe(0); + }); + } + + test("NO_PROXY denial preserves an unavailable account row without sending its bearer", async () => { + await saveCredential("google-antigravity", { access: "agy-first", refresh: "r1", expires: Date.now() + 3600_000, projectId: "proj-first", accountId: "agy-a", email: "a@example.com" }); + process.env.no_proxy = "daily-cloudcode-pa.googleapis.com"; + const admitted: Array = []; + let posted = 0; + let plainFetchCalls = 0; + globalThis.fetch = (async () => { plainFetchCalls += 1; throw new Error("unexpected raw quota fetch"); }) as typeof fetch; + setAntigravityAccountQuotaTransportForTests({ + resolveAddresses: async (_url, options) => { + const allow = typeof options === "object" ? options?.allowBenchmarkAddresses : undefined; + admitted.push(allow); + if (!allow) throw new Error("benchmark address rejected"); + return { hostname: "daily-cloudcode-pa.googleapis.com", addresses: [{ address: "198.18.56.214", family: 4 }], privateNetwork: false }; + }, + pinnedPost: async () => { posted += 1; return new Response(antigravitySummaryBody(0.5, 0.5)); }, + }); + expect(await fetchProviderAccountQuotas("google-antigravity")).toEqual([{ accountId: idFor("a@example.com"), quota: null, unavailable: true }]); + expect(admitted).toEqual([false, false]); + expect(posted).toBe(0); + expect(plainFetchCalls).toBe(0); + }); + + for (const status of [302, 307, 308, 401, 403]) { + for (const fallback of [false, true]) { + test(`account ${fallback ? "models" : "summary"} ${status} returns unavailable without following Location`, async () => { + await saveCredential("google-antigravity", { access: "agy-first", refresh: "r1", expires: Date.now() + 3600_000, projectId: "proj-first", accountId: "agy-a", email: "a@example.com" }); + const posted: string[] = []; + let plainFetchCalls = 0; + globalThis.fetch = (async () => { plainFetchCalls += 1; throw new Error("unexpected raw quota fetch"); }) as typeof fetch; + setAntigravityAccountQuotaTransportForTests({ + resolveAddresses: async () => ({ hostname: "daily-cloudcode-pa.googleapis.com", addresses: [{ address: "142.250.0.1", family: 4 }], privateNetwork: false }), + pinnedPost: async url => { + posted.push(url); + if (url === summaryUrl && fallback) return new Response(null, { status: 404 }); + return new Response(null, { status, headers: { location: "https://daily-cloudcode-pa.googleapis.com/redirect-target" } }); + }, + }); + expect(await fetchProviderAccountQuotas("google-antigravity")).toEqual([{ accountId: idFor("a@example.com"), quota: null, unavailable: true }]); + expect(posted).toEqual(fallback ? [summaryUrl, modelsUrl] : [summaryUrl]); + expect(plainFetchCalls).toBe(0); + }); + } + } + test("a rejected destination never receives a bearer; the row is unavailable, not 0%", async () => { const expires = Date.now() + 60 * 60_000; await saveCredential("google-antigravity", { access: "agy-first", refresh: "r1", expires, projectId: "proj-first", accountId: "agy-a", email: "a@example.com" }); diff --git a/tests/providers/provider-quota.test.ts b/tests/providers/provider-quota.test.ts index 5a02e53f28..9c12869b04 100644 --- a/tests/providers/provider-quota.test.ts +++ b/tests/providers/provider-quota.test.ts @@ -13,6 +13,7 @@ import { saveCredential } from "../../src/oauth/store"; import { clearProviderQuotaCache, fetchProviderQuotaReports, + isCanonicalAntigravityQuotaUrl, parseOllamaCloudQuota, parseXaiCreditsResponse, QUOTA_RESPONSE_MAX_BYTES, @@ -21,7 +22,10 @@ import { setProviderQuotaBeforePublishForTests, } from "../../src/providers/quota"; import type { OcxConfig } from "../../src/types"; +import { PROXY_ENV_KEYS } from "../../src/lib/proxy-env"; import { repoPath } from "../helpers/repo-root"; +const proxyKeys = PROXY_ENV_KEYS.flatMap(key => [key, key.toLowerCase()]); +const originalProxyEnv = Object.fromEntries(proxyKeys.map(key => [key, process.env[key]])); const originalFetch = globalThis.fetch; const previousOpencodexHome = process.env.OPENCODEX_HOME; const previousCodexHome = process.env.CODEX_HOME; @@ -75,6 +79,7 @@ function testConfig(): OcxConfig { } beforeEach(() => { + for (const key of proxyKeys) delete process.env[key]; opencodexHome = mkdtempSync(join(tmpdir(), "ocx-quota-")); codexHome = mkdtempSync(join(tmpdir(), "codex-quota-")); process.env.OPENCODEX_HOME = opencodexHome; @@ -90,6 +95,10 @@ beforeEach(() => { }); afterEach(() => { + for (const key of proxyKeys) { + if (originalProxyEnv[key] === undefined) delete process.env[key]; + else process.env[key] = originalProxyEnv[key]; + } globalThis.fetch = originalFetch; clearAccountQuota(); clearProviderQuotaCache(); @@ -203,15 +212,39 @@ describe("fetchProviderQuotaReports", () => { await saveCredential("google-antigravity", { access: "agy-access-secret", refresh: "agy-refresh-secret", expires: Date.now() + 3600_000, projectId: "agy-project-secret" }); await saveCredential("kimi", { access: "kimi-access-secret", refresh: "kimi-refresh-secret", expires: Date.now() + 3600_000 }); - // The Antigravity summary probe is pinned to Google's host through the provider-outbound - // transport and never touches globalThis.fetch; without this seam the test would make a - // real network request. A 404 here exercises the fetchAvailableModels fallback below. + const seen: { url: string; authorization?: string; body?: string }[] = []; + // Both Antigravity accounting requests use the pinned transport. Keep the + // summary unavailable so this fixture still exercises the models fallback. setAntigravityAccountQuotaTransportForTests({ resolveAddresses: async () => ({ hostname: "daily-cloudcode-pa.googleapis.com", addresses: [{ address: "142.250.0.1", family: 4 }], privateNetwork: false }), - pinnedPost: async () => new Response("not found", { status: 404 }), + pinnedPost: async (url, _pinned, body, _signal, options) => { + seen.push({ url, authorization: new Headers(options?.headers).get("authorization") ?? undefined, body }); + if (url === "https://daily-cloudcode-pa.googleapis.com/v1internal:fetchAvailableModels") { + return new Response(JSON.stringify({ + models: { + "gemini-3.6-flash-medium": { + displayName: "Gemini 3.6 Flash (Medium)", + quotaInfo: { remainingFraction: 0.64, resetTime: "2026-07-05T14:00:00Z" }, + }, + "claude-sonnet-4.6": { + displayName: "Claude Sonnet", + quotaInfoByTier: { + sonnet: { remainingFraction: 0.21, resetTime: "2026-07-05T15:00:00Z" }, + }, + }, + autocomplete: { + displayName: "Autocomplete", + quotaInfo: { remainingFraction: 0.01, resetTime: "2026-07-05T16:00:00Z" }, + }, + }, + rawProject: "agy-project-secret", + rawToken: "agy-access-secret", + }), { status: 200, headers: { "content-type": "application/json" } }); + } + return new Response("not found", { status: 404 }); + }, }); - const seen: { url: string; authorization?: string; body?: string }[] = []; globalThis.fetch = (async (input: RequestInfo | URL, init?: RequestInit) => { const url = String(input); const headers = init?.headers as Record | undefined; @@ -258,28 +291,6 @@ describe("fetchProviderQuotaReports", () => { billingCycleEnd: "2026-08-01T00:00:00.000Z", }), { status: 200, headers: { "content-type": "application/json" } }); } - if (url === "https://daily-cloudcode-pa.googleapis.com/v1internal:fetchAvailableModels") { - return new Response(JSON.stringify({ - models: { - "gemini-3.6-flash-medium": { - displayName: "Gemini 3.6 Flash (Medium)", - quotaInfo: { remainingFraction: 0.64, resetTime: "2026-07-05T14:00:00Z" }, - }, - "claude-sonnet-4.6": { - displayName: "Claude Sonnet", - quotaInfoByTier: { - sonnet: { remainingFraction: 0.21, resetTime: "2026-07-05T15:00:00Z" }, - }, - }, - autocomplete: { - displayName: "Autocomplete", - quotaInfo: { remainingFraction: 0.01, resetTime: "2026-07-05T16:00:00Z" }, - }, - }, - rawProject: "agy-project-secret", - rawToken: "agy-access-secret", - }), { status: 200, headers: { "content-type": "application/json" } }); - } if (url === "https://api.kimi.com/coding/v1/usages") { return new Response(JSON.stringify({ user: { userId: "kimi-user-secret", businessId: "kimi-business-secret" }, @@ -3078,6 +3089,205 @@ describe("fetchProviderQuotaReports", () => { expect(posted).toEqual(["https://daily-cloudcode-pa.googleapis.com/v1internal:retrieveUserQuotaSummary"]); }); + describe("Google Antigravity canonical quota transport (#3781)", () => { + const summaryUrl = "https://daily-cloudcode-pa.googleapis.com/v1internal:retrieveUserQuotaSummary"; + const modelsUrl = "https://daily-cloudcode-pa.googleapis.com/v1internal:fetchAvailableModels"; + const summaryBody = JSON.stringify({ groups: [{ displayName: "Gemini", buckets: [{ window: "5h", remainingFraction: 0.6 }] }] }); + const modelsBody = JSON.stringify({ models: { gemini: { quotaInfo: { remainingFraction: 0.75 } } } }); + const publicAddress = { hostname: "daily-cloudcode-pa.googleapis.com", addresses: [{ address: "142.250.0.1", family: 4 }], privateNetwork: false }; + let plainFetchCalls: string[]; + + function config(baseUrl = "https://daily-cloudcode-pa.googleapis.com"): OcxConfig { + return { + defaultProvider: "google-antigravity", + providers: { "google-antigravity": { adapter: "google", authMode: "oauth", baseUrl, allowPrivateNetwork: true } }, + } as OcxConfig; + } + + beforeEach(async () => { + await saveCredential("google-antigravity", { + access: "agy-canonical-access", refresh: "agy-canonical-refresh", expires: Date.now() + 3600_000, projectId: "agy-canonical-project", + }); + plainFetchCalls = []; + globalThis.fetch = (async (input) => { + plainFetchCalls.push(String(input)); + throw new Error("unexpected quota-owned raw fetch"); + }) as typeof fetch; + }); + + test("canonical proof accepts only the two exact Google accounting URLs", () => { + for (const url of [summaryUrl, modelsUrl]) { + expect(isCanonicalAntigravityQuotaUrl("google-antigravity", url)).toBe(true); + expect(isCanonicalAntigravityQuotaUrl("custom", url)).toBe(false); + for (const candidate of [ + "", "not a URL", url.replace("https:", "http:"), + url.replace(".googleapis.com", ".googleapis.com.evil.example"), + url.replace("daily-cloudcode-pa", "cloudcode-pa"), + url.replace("https://", "https://user:pass@"), + url.replace(".com/", ".com:443/"), url.replace(".com/", ".com:8443/"), + url.replace("https://", "HTTPS://"), `${url}/`, `${url}/extra`, + `${url}?token=secret`, `${url}#fragment`, ` ${url}`, + url.replace("v1internal:", "v1internal%3A"), + url.replace("v1internal:", "prefix/v1internal:"), + "https://daily-cloudcode-pa.googleapis.com/v1internal:other", + "https://198.18.0.1/v1internal:fetchAvailableModels", + "https://127.0.0.1/v1internal:fetchAvailableModels", + "https://169.254.169.254/v1internal:fetchAvailableModels", + ]) expect(isCanonicalAntigravityQuotaUrl("google-antigravity", candidate)).toBe(false); + } + }); + + for (const fallback of [false, true]) { + test(`production proof survives reset for Fake-IP ${fallback ? "fallback" : "summary"}`, async () => { + const resolved: Array<{ url: string; benchmark?: boolean; private?: boolean; mihomo?: boolean }> = []; + const posted: Array<{ url: string; address: string; tls?: boolean; auth: string | null; body: string; signal: boolean }> = []; + setAntigravityAccountQuotaTransportForTests({ isCanonicalUrl: () => false }); + setAntigravityAccountQuotaTransportForTests(null); + // Resolver/pinned-only overrides must retain the production canonical proof. + setAntigravityAccountQuotaTransportForTests({ + resolveAddresses: async (url, options) => { + const policy = typeof options === "object" ? options : undefined; + resolved.push({ url, benchmark: policy?.allowBenchmarkAddresses, private: policy?.allowPrivateNetwork, mihomo: policy?.allowMihomoIpv6FakeIp }); + if (!policy?.allowBenchmarkAddresses) throw new Error("benchmark address rejected"); + return { ...publicAddress, addresses: [{ address: "198.18.56.214", family: 4 }] }; + }, + pinnedPost: async (url, pinned, body, signal, options) => { + posted.push({ url, address: pinned.address, tls: options?.rejectUnauthorized, auth: new Headers(options?.headers).get("authorization"), body, signal: signal instanceof AbortSignal }); + if (url === summaryUrl && fallback) return new Response(null, { status: 404 }); + return new Response(url === summaryUrl ? summaryBody : modelsBody); + }, + }); + const result = await fetchProviderQuotaReports(config(), true); + const urls = fallback ? [summaryUrl, modelsUrl] : [summaryUrl]; + expect(resolved).toEqual(urls.map(url => ({ url, benchmark: true, private: false, mihomo: false }))); + expect(posted).toEqual(urls.map(url => ({ url, address: "198.18.56.214", tls: true, auth: "Bearer agy-canonical-access", body: JSON.stringify({ project: "agy-canonical-project" }), signal: true }))); + expect(result.reports[0]?.source).toBe(fallback ? "google-antigravity:fetchAvailableModels" : "google-antigravity:retrieveUserQuotaSummary"); + expect(result.reports[0]?.quota.customWindows).toEqual([{ label: "Gem", percent: fallback ? 25 : 40 }]); + expect(plainFetchCalls).toEqual([]); + }); + } + + for (const baseUrl of ["https://custom.example/v1", "http://127.0.0.1:1/", "https://169.254.169.254/", "https://daily-cloudcode-pa.googleapis.com.evil.example/"]) { + test(`models fallback ignores configured destination ${baseUrl}`, async () => { + const resolved: Array<{ url: string; private?: boolean }> = []; + const posted: string[] = []; + setAntigravityAccountQuotaTransportForTests({ + resolveAddresses: async (url, options) => { + resolved.push({ url, private: typeof options === "object" ? options?.allowPrivateNetwork : undefined }); + return publicAddress; + }, + pinnedPost: async (url) => { + posted.push(url); + return url === summaryUrl ? new Response(null, { status: 404 }) : new Response(modelsBody); + }, + }); + const result = await fetchProviderQuotaReports(config(baseUrl), true); + expect(result.reports[0]?.quota.customWindows).toEqual([{ label: "Gem", percent: 25 }]); + expect(resolved).toEqual([{ url: summaryUrl, private: false }, { url: modelsUrl, private: false }]); + expect(posted).toEqual([summaryUrl, modelsUrl]); + expect(plainFetchCalls).toEqual([]); + }); + } + + for (const noProxy of ["daily-cloudcode-pa.googleapis.com", "*"]) { + test(`NO_PROXY ${noProxy} keeps benchmark DNS blocked`, async () => { + process.env.NO_PROXY = noProxy; + const admitted: Array = []; + let posted = 0; + setAntigravityAccountQuotaTransportForTests({ + resolveAddresses: async (_url, options) => { + const allow = typeof options === "object" ? options?.allowBenchmarkAddresses : undefined; + admitted.push(allow); + if (!allow) throw new Error("benchmark address rejected"); + return publicAddress; + }, + pinnedPost: async () => { posted += 1; return new Response(summaryBody); }, + }); + expect((await fetchProviderQuotaReports(config(), true)).reports).toEqual([]); + expect(admitted).toEqual([false, false]); + expect(posted).toBe(0); + expect(plainFetchCalls).toEqual([]); + }); + } + + test("resolved-address policy rejection cannot escape to raw fallback fetch", async () => { + // The real classifier's mixed-address cases live in destination-policy-resolved.test.ts; + // this checks that quota cannot bypass its rejection through a second transport. + const resolved: string[] = []; + let posted = 0; + setAntigravityAccountQuotaTransportForTests({ + resolveAddresses: async url => { resolved.push(url); throw new Error("provider URL resolves to metadata"); }, + pinnedPost: async () => { posted += 1; return new Response(modelsBody); }, + }); + expect((await fetchProviderQuotaReports(config("https://custom.example"), true)).reports).toEqual([]); + expect(resolved).toEqual([summaryUrl, modelsUrl]); + expect(posted).toBe(0); + expect(plainFetchCalls).toEqual([]); + }); + + for (const summary of ["{}", "invalid JSON"]) { + test(`unusable summary ${summary} falls back through the fixed models transport`, async () => { + const posted: string[] = []; + setAntigravityAccountQuotaTransportForTests({ + resolveAddresses: async () => publicAddress, + pinnedPost: async url => { + posted.push(url); + return new Response(url === summaryUrl ? summary : modelsBody); + }, + }); + const result = await fetchProviderQuotaReports(config(), true); + expect(result.reports[0]?.quota.customWindows).toEqual([{ label: "Gem", percent: 25 }]); + expect(posted).toEqual([summaryUrl, modelsUrl]); + expect(plainFetchCalls).toEqual([]); + }); + } + + for (const status of [200, 500]) { + test(`unusable models payload with HTTP ${status} produces no fabricated quota`, async () => { + const posted: string[] = []; + setAntigravityAccountQuotaTransportForTests({ + resolveAddresses: async () => publicAddress, + pinnedPost: async url => { + posted.push(url); + return url === summaryUrl ? new Response(null, { status: 404 }) : new Response("invalid JSON", { status }); + }, + }); + expect((await fetchProviderQuotaReports(config(), true)).reports).toEqual([]); + expect(posted).toEqual([summaryUrl, modelsUrl]); + expect(plainFetchCalls).toEqual([]); + }); + } + + for (const status of [302, 307, 308, 401, 403]) { + test(`summary ${status} terminates without a models request`, async () => { + const posted: string[] = []; + setAntigravityAccountQuotaTransportForTests({ + resolveAddresses: async () => publicAddress, + pinnedPost: async url => { posted.push(url); return new Response(null, { status, headers: { location: modelsUrl } }); }, + }); + expect((await fetchProviderQuotaReports(config(), true)).reports).toEqual([]); + expect(posted).toEqual([summaryUrl]); + expect(plainFetchCalls).toEqual([]); + }); + } + + for (const status of [302, 307, 308]) { + test(`models ${status} does not follow even a same-host redirect`, async () => { + const posted: string[] = []; + setAntigravityAccountQuotaTransportForTests({ + resolveAddresses: async () => publicAddress, + pinnedPost: async url => { + posted.push(url); + return url === summaryUrl ? new Response(null, { status: 404 }) : new Response(null, { status, headers: { location: summaryUrl } }); + }, + }); + expect((await fetchProviderQuotaReports(config(), true)).reports).toEqual([]); + expect(posted).toEqual([summaryUrl, modelsUrl]); + expect(plainFetchCalls).toEqual([]); + }); + } + }); + test("Ollama Cloud maps 5-hour session and weekly windows from /api/usage (legacy plan)", async () => { const seen: Array<{ url: string; authorization?: string; redirect?: RequestRedirect }> = []; globalThis.fetch = (async (input: RequestInfo | URL, init?: RequestInit) => { From cb84ad895d0101887c0fae3707676a6c31aa07e4 Mon Sep 17 00:00:00 2001 From: t Date: Mon, 7 Sep 2026 01:58:25 +0900 Subject: [PATCH 2/2] perf(logs): poll verified request-history deltas without losing updates Reimplements #3250 with snapshot-prefix validation, process epochs and current response fences. Co-authored-by: chilung --- .../pr-screenshots/t4-log-polling-81a8.png | Bin 0 -> 261934 bytes .../content/docs/reference/management-api.md | 8 + gui/src/pages/Logs.tsx | 23 ++- gui/src/pages/log-poll.ts | 38 ++++ gui/tests/log-poll.test.ts | 39 ++++ gui/tests/logs-auto-refresh.test.tsx | 182 +++++++++++++++++- src/server/management/logs-usage-routes.ts | 11 +- src/server/request-log-cursor.ts | 84 ++++++++ .../management-api-logs-metrics.test.ts | 137 +++++++++++++ tests/server/server-management-auth.test.ts | 60 ++++++ tests/usage/request-log.test.ts | 95 +++++++++ 11 files changed, 660 insertions(+), 17 deletions(-) create mode 100644 docs-site/public/pr-screenshots/t4-log-polling-81a8.png create mode 100644 gui/src/pages/log-poll.ts create mode 100644 gui/tests/log-poll.test.ts create mode 100644 src/server/request-log-cursor.ts diff --git a/docs-site/public/pr-screenshots/t4-log-polling-81a8.png b/docs-site/public/pr-screenshots/t4-log-polling-81a8.png new file mode 100644 index 0000000000000000000000000000000000000000..4dd53042e94eecd25fe5cc80d73cf50b43ff302e GIT binary patch literal 261934 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�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 key: resourceKey, active: false, request: 0 }); + const logPollRef = useRef<{ key: string; cursor: string | null; rows: LogEntry[] }>( + { key: resourceKey, cursor: null, rows: [] }, + ); // Invalidate the old resource at commit, before passive resource-loader effects. // A late body read must not mutate this page's clock, cache or retry state. useLayoutEffect(() => { const clock = { key: resourceKey, active: true, request: 0 }; filterClockRef.current = clock; + // Cached display rows never establish a cursor, including A -> B -> A. + logPollRef.current = { key: resourceKey, cursor: null, rows: [] }; setFilterClockNow(Date.now()); return () => { clock.active = false; }; }, [resourceKey]); @@ -462,16 +468,22 @@ export default function Logs({ apiBase }: { apiBase: string }) { logRetryRef.current = retry; } if (retry.failures > 0 && Date.now() < retry.nextAttemptAt) throw retry.error; + const poll = logPollRef.current; + const cursor = poll.key === resourceKey ? poll.cursor : null; + const url = `${apiBase}/api/logs?limit=2000${cursor ? `&cursor=${encodeURIComponent(cursor)}` : ""}`; try { - const res = await fetch(`${apiBase}/api/logs?limit=2000`, { signal }); + const res = await fetch(url, { signal }); if (!res.ok) throw new Error(`${res.status} ${res.statusText}`.trim()); - const body = await res.json() as LogEntry[] | { logs?: LogEntry[]; generatedAt?: unknown }; + const body: unknown = await res.json(); const receivedAt = performance.now(); - const raw = Array.isArray(body) ? body : (body.logs ?? []); - const next = raw.map(sanitizeLogEntryRouteDecision); + const parsed = parseLogPollResponse(body); + const incoming = parsed.rows.map(sanitizeLogEntryRouteDecision); + const next = cursor && parsed.cursor && !parsed.reset + ? mergeLogDelta(poll.rows, incoming) : incoming; // The resource-store generation guard runs only after this loader returns. // Guard these local side effects here as fetch/body readers may ignore abort. if (!isCurrent()) throw signal.reason ?? new DOMException("Obsolete log request", "AbortError"); + logPollRef.current = { key: resourceKey, cursor: parsed.cursor, rows: next }; // Reconcile when the accepted snapshot changes, using the latest user state // rather than filters captured when the request started. Persist disappearance // as All so a later ring cannot resurrect a cleared selection. @@ -488,7 +500,7 @@ export default function Logs({ apiBase }: { apiBase: string }) { if (previous.model === nextModel && previous.provider === nextProvider) return previous; return { ...previous, model: nextModel, provider: nextProvider }; }); - const sample = logsClockAnchor(Array.isArray(body) ? undefined : body.generatedAt, receivedAt); + const sample = logsClockAnchor(parsed.generatedAt, receivedAt); if (sample) clock.anchor = sample; setFilterClockNow(logsClockNow(clock.anchor, receivedAt, Date.now())); logRetryRef.current = { key: resourceKey, failures: 0, nextAttemptAt: 0, error: null }; @@ -525,6 +537,7 @@ export default function Logs({ apiBase }: { apiBase: string }) { const fetchLogs = logsResource.refresh; const retryLogs = useCallback(() => { logRetryRef.current = { key: resourceKey, failures: 0, nextAttemptAt: 0, error: null }; + logPollRef.current = { key: resourceKey, cursor: null, rows: [] }; fetchLogs({ forceLoading: true }); }, [fetchLogs, resourceKey]); diff --git a/gui/src/pages/log-poll.ts b/gui/src/pages/log-poll.ts new file mode 100644 index 0000000000..ad13d986f7 --- /dev/null +++ b/gui/src/pages/log-poll.ts @@ -0,0 +1,38 @@ +export interface ParsedLogPollResponse { + rows: T[]; + cursor: string | null; + reset: boolean; + generatedAt?: unknown; + timeZone?: string; + total?: number; +} + +/** Legacy responses replace the window; malformed cursor responses keep last-good data. */ +export function parseLogPollResponse(body: unknown): ParsedLogPollResponse { + if (Array.isArray(body)) return { rows: body as T[], cursor: null, reset: false }; + if (!body || typeof body !== "object") throw new Error("Invalid log response"); + const value = body as Record; + const hasCursor = Object.hasOwn(value, "cursor") || Object.hasOwn(value, "reset"); + if ((value.logs !== undefined && !Array.isArray(value.logs)) + || (hasCursor && (!Array.isArray(value.logs) + || typeof value.cursor !== "string" || value.cursor.length === 0 || value.cursor.length > 512 + || !/^[A-Za-z0-9_-]+$/.test(value.cursor) || typeof value.reset !== "boolean"))) { + throw new Error("Invalid log response"); + } + return { + rows: (value.logs ?? []) as T[], + cursor: hasCursor ? value.cursor as string : null, + reset: value.reset === true, + generatedAt: value.generatedAt, + ...(typeof value.timeZone === "string" ? { timeZone: value.timeZone } : {}), + ...(typeof value.total === "number" && Number.isFinite(value.total) && value.total >= 0 + ? { total: value.total } : {}), + }; +} + +/** Updates/removals arrive as resets. Preserve order and even repeated IDs in valid suffixes. */ +export function mergeLogDelta(previous: T[], incoming: readonly T[], cap = 2000): T[] { + if (incoming.length === 0 && previous.length <= cap) return previous; + const merged = [...previous, ...incoming]; + return merged.length > cap ? merged.slice(merged.length - cap) : merged; +} diff --git a/gui/tests/log-poll.test.ts b/gui/tests/log-poll.test.ts new file mode 100644 index 0000000000..d7c2559a1f --- /dev/null +++ b/gui/tests/log-poll.test.ts @@ -0,0 +1,39 @@ +import { describe, expect, test } from "bun:test"; +import { mergeLogDelta, parseLogPollResponse } from "../src/pages/log-poll"; + +describe("log polling protocol", () => { + test("legacy arrays and envelopes replace snapshots without a cursor", () => { + const rows = [{ requestId: "a" }]; + expect(parseLogPollResponse(rows)).toEqual({ rows, cursor: null, reset: false }); + expect(parseLogPollResponse({ logs: rows, generatedAt: 123, timeZone: "UTC", total: 5 })) + .toEqual({ rows, cursor: null, reset: false, generatedAt: 123, timeZone: "UTC", total: 5 }); + expect(parseLogPollResponse({ logs: rows, generatedAt: "bad" }).generatedAt).toBe("bad"); + }); + + test("empty deltas and resets retain clock and window metadata", () => { + for (const reset of [false, true]) { + expect(parseLogPollResponse({ logs: [], cursor: "opaque-cursor", reset, generatedAt: 456, total: 2, timeZone: "UTC" })) + .toEqual({ rows: [], cursor: "opaque-cursor", reset, generatedAt: 456, total: 2, timeZone: "UTC" }); + } + }); + + test("invalid cursor envelopes fail instead of clearing accepted rows", () => { + for (const body of [null, "bad", { logs: {} }, { logs: [], cursor: null, reset: false }, + { logs: [], cursor: "", reset: false }, { logs: [], cursor: "c", reset: "false" }, + { logs: [], cursor: "c" }, { logs: [], reset: false }, { cursor: "c", reset: false }, + { logs: [], cursor: "a".repeat(513), reset: false }, { logs: [], cursor: " c ", reset: false }]) { + expect(() => parseLogPollResponse(body)).toThrow("Invalid log response"); + } + }); + + test("append preserves order and repeated IDs without mutating inputs; cap keeps newest rows", () => { + const previous = [{ requestId: "same", value: 1 }, { requestId: "other", value: 2 }]; + const incoming = [{ requestId: "same", value: 3 }]; + expect(mergeLogDelta(previous, incoming)).toEqual([...previous, ...incoming]); + expect(mergeLogDelta(previous, incoming, 2)).toEqual([previous[1], incoming[0]]); + expect(mergeLogDelta(previous, [])).toBe(previous); + expect(mergeLogDelta(previous, [], 1)).toEqual([previous[1]]); + expect(previous).toEqual([{ requestId: "same", value: 1 }, { requestId: "other", value: 2 }]); + expect(incoming).toEqual([{ requestId: "same", value: 3 }]); + }); +}); diff --git a/gui/tests/logs-auto-refresh.test.tsx b/gui/tests/logs-auto-refresh.test.tsx index 44366f146b..200b6c4f23 100644 --- a/gui/tests/logs-auto-refresh.test.tsx +++ b/gui/tests/logs-auto-refresh.test.tsx @@ -6,7 +6,7 @@ import { LanguageProvider } from "../src/i18n/provider"; import { clearClientResourceStoresForTests } from "../src/client-resource"; import Logs from "../src/pages/Logs"; -const globals = ["document", "window", "navigator", "localStorage", "IS_REACT_ACT_ENVIRONMENT", "ResizeObserver"] as const; +const globals = ["document", "window", "navigator", "localStorage", "sessionStorage", "IS_REACT_ACT_ENVIRONMENT", "ResizeObserver"] as const; let previousGlobals: Record<(typeof globals)[number], unknown>; let testWindow: Window; const originalFetch = globalThis.fetch; @@ -89,6 +89,7 @@ beforeEach(() => { window: { configurable: true, value: testWindow }, navigator: { configurable: true, value: testWindow.navigator }, localStorage: { configurable: true, value: testWindow.localStorage }, + sessionStorage: { configurable: true, value: testWindow.sessionStorage }, }); (globalThis as typeof globalThis & { IS_REACT_ACT_ENVIRONMENT?: boolean }).IS_REACT_ACT_ENVIRONMENT = true; installLayoutStubs(testWindow); @@ -952,6 +953,156 @@ function proxyLogEnvelope(generatedAt: unknown, logs: unknown[]) { return { generatedAt, timeZone: "UTC", total: logs.length, logs }; } +function cursorLogEnvelope(generatedAt: unknown, logs: unknown[], cursor: string, reset = false) { + return { ...proxyLogEnvelope(generatedAt, logs), cursor, reset }; +} + +test("Logs: append, empty delta, mutation reset and legacy fallback keep the complete window", async () => { + const urls: string[] = []; + let step = 0; + const responses = [ + cursorLogEnvelope(PROXY_NOW, [sampleLog], "c0"), + cursorLogEnvelope(PROXY_NOW, [], "c0"), + cursorLogEnvelope(PROXY_NOW, [updatedLog], "c1"), + cursorLogEnvelope(PROXY_NOW, [], "c1"), + cursorLogEnvelope(PROXY_NOW, [{ ...sampleLog, model: "gpt-mutated", durationMs: 987 }], "c2", true), + [updatedLog], + { logs: [sampleLog] }, + ]; + globalThis.fetch = (async input => { + const url = String(input); + if (!url.includes("/api/logs")) return jsonResponse({ timeZone: "UTC" }); + urls.push(url); + return jsonResponse(responses[step]); + }) as typeof fetch; + const { root, container } = await mountLogs(); + try { + await flushMicrotasks(); + expect(urls[0]).toBe("http://localhost/api/logs?limit=2000"); + step = 1; + await advanceSilentRefresh(); + expect(urls.at(-1)).toContain("cursor=c0"); + expect(visibleRequestIds(container)).toEqual(["req-1"]); + step = 2; + await advanceSilentRefresh(); + expect(visibleRequestIds(container)).toEqual(["req-2", "req-1"]); + await changeLogSelect(container, "Model", "gpt-test"); + step = 3; + await advanceSilentRefresh(); + expect(container.querySelector('select[aria-label="Model"]')!.value).toBe("gpt-test"); + expect(visibleRequestIds(container)).toEqual(["req-1"]); + step = 4; + await advanceSilentRefresh(); + expect(urls.at(-1)).toContain("cursor=c1"); + expect(visibleRequestIds(container)).toEqual(["req-1"]); + expectTableLoaded(container, "gpt-mutated"); + expect(container.textContent).toContain("987"); + expect(container.querySelector('select[aria-label="Model"]')!.value).toBe(""); + step = 5; + await advanceSilentRefresh(); + expect(visibleRequestIds(container)).toEqual(["req-2"]); + step = 6; + await advanceSilentRefresh(); + expect(urls.at(-1)).toBe("http://localhost/api/logs?limit=2000"); + expect(visibleRequestIds(container)).toEqual(["req-1"]); + } finally { + await act(async () => { root.unmount(); }); + } +}); + +test("Logs: an empty delta advances the proxy clock without discarding retained rows", async () => { + let step = 0; + const row = { ...sampleLog, timestamp: PROXY_NOW - 5 * 60_000 }; + globalThis.fetch = (async input => { + if (!String(input).includes("/api/logs")) return jsonResponse({ timeZone: "UTC" }); + return jsonResponse(cursorLogEnvelope(step ? PROXY_NOW + 20 * 60_000 : PROXY_NOW, step ? [] : [row], "same")); + }) as typeof fetch; + const { root, container } = await mountLogs(); + try { + await flushMicrotasks(); + await changeLogSelect(container, "Time", "15m"); + expect(visibleRequestIds(container)).toEqual(["req-1"]); + step = 1; + await advanceSilentRefresh(); + expect(visibleRequestIds(container)).toEqual([]); + await changeLogSelect(container, "Time", "all"); + expect(visibleRequestIds(container)).toEqual(["req-1"]); + expect(JSON.parse(sessionStorage.getItem("ocx.logs.list.v1:http://localhost")!)).toHaveLength(1); + } finally { + await act(async () => { root.unmount(); }); + } +}); + +test("Logs: malformed polls preserve cursor/cache, back off, and explicit retry reads a full snapshot", async () => { + let failing = false; + const urls: string[] = []; + globalThis.fetch = (async input => { + const url = String(input); + if (!url.includes("/api/logs")) return jsonResponse({ timeZone: "UTC" }); + urls.push(url); + if (failing) return jsonResponse({ logs: [], cursor: "poison", reset: "false" }); + return jsonResponse(cursorLogEnvelope(PROXY_NOW, url.includes("cursor=") ? [] : [sampleLog], "good")); + }) as typeof fetch; + const { root, container } = await mountLogs(); + try { + await flushMicrotasks(); + failing = true; + await advanceSilentRefresh(); + const count = urls.length; + await advanceSilentRefresh(); + expect(urls).toHaveLength(count); + await advanceSilentRefresh(14000); + expect(container.textContent).toContain("Could not load request logs."); + expect(visibleRequestIds(container)).toEqual(["req-1"]); + expect(urls.slice(1).every(url => url.includes("cursor=good"))).toBe(true); + expect(JSON.parse(sessionStorage.getItem("ocx.logs.list.v1:http://localhost")!)).toHaveLength(1); + failing = false; + await act(async () => { clickRetry(container); }); + await flushMicrotasks(); + expect(urls.at(-1)).toBe("http://localhost/api/logs?limit=2000"); + expectTableLoaded(container, "gpt-test"); + } finally { + await act(async () => { root.unmount(); }); + } +}); + +test("Logs: A to B to A and remount start without a cached cursor", async () => { + const urls: string[] = []; + globalThis.fetch = (async input => { + const url = String(input); + if (!url.includes("/api/logs")) return jsonResponse({ timeZone: "UTC" }); + urls.push(url); + const name = url.startsWith("http://proxy-a/") ? "a" : "b"; + return jsonResponse(cursorLogEnvelope(PROXY_NOW, url.includes("cursor=") ? [] : [ + { ...sampleLog, requestId: name }, + ], `cursor-${name}`)); + }) as typeof fetch; + const first = await mountLogs("http://proxy-a"); + try { + await flushMicrotasks(); + await advanceSilentRefresh(); + expect(urls.at(-1)).toContain("cursor=cursor-a"); + for (const name of ["b", "a"]) { + const start = urls.length; + await renderLogsAt(first.root, `http://proxy-${name}`); + await advanceSilentRefresh(); + expect(urls[start]).toBe(`http://proxy-${name}/api/logs?limit=2000`); + expect(visibleRequestIds(first.container)).toEqual([name]); + } + } finally { + await act(async () => { first.root.unmount(); }); + } + const start = urls.length; + const remount = await mountLogs("http://proxy-a"); + try { + await advanceSilentRefresh(); + expect(urls[start]).toBe("http://proxy-a/api/logs?limit=2000"); + expect(visibleRequestIds(remount.container)).toEqual(["a"]); + } finally { + await act(async () => { remount.root.unmount(); }); + } +}); + async function renderLogsAt(root: Root, apiBase: string): Promise { await act(async () => { root.render(); @@ -1104,6 +1255,7 @@ function delayedLogBody() { test("Logs: a late body from an aborted old apiBase cannot poison the new proxy clock", async () => { const late = delayedLogBody(); + const urls: string[] = []; let oldSignal: AbortSignal | undefined; let oldRequests = 0; const wall = jest.spyOn(Date, "now").mockReturnValue(PROXY_NOW + 6 * 60 * 60_000); @@ -1113,14 +1265,15 @@ test("Logs: a late body from an aborted old apiBase cannot poison the new proxy globalThis.fetch = (async (input, init) => { const url = String(input); if (!url.includes("/api/logs")) return jsonResponse({ timeZone: "UTC" }); + urls.push(url); if (url.startsWith("http://proxy-a/")) { oldRequests++; oldSignal = init?.signal ?? undefined; return late.response; } - return jsonResponse(proxyLogEnvelope(PROXY_NOW, [ + return jsonResponse(cursorLogEnvelope(PROXY_NOW, url.includes("cursor=") ? [] : [ { ...sampleLog, requestId: "proxy-b", timestamp: PROXY_NOW - 60_000 }, - ])); + ], "cursor-b")); }) as typeof fetch; let mounted: Awaited> | undefined; try { @@ -1136,9 +1289,13 @@ test("Logs: a late body from an aborted old apiBase cannot poison the new proxy await act(async () => { container.querySelector(".logs-auto-refresh input")!.click(); }); await flushMicrotasks(); expect(visibleRequestIds(container)).toEqual(["proxy-b"]); - await act(async () => { late.resolve(proxyLogEnvelope(PROXY_NOW + 12 * 60 * 60_000, [])); }); + await act(async () => { late.resolve(cursorLogEnvelope(PROXY_NOW + 12 * 60 * 60_000, [], "poison", true)); }); await flushMicrotasks(); expect(visibleRequestIds(container)).toEqual(["proxy-b"]); + expect(JSON.parse(sessionStorage.getItem("ocx.logs.list.v1:http://proxy-b")!)).toHaveLength(1); + await act(async () => { container.querySelector(".logs-auto-refresh input")!.click(); }); + await advanceSilentRefresh(); + expect(urls.at(-1)).toContain("cursor=cursor-b"); expect(container.querySelector('select[aria-label="Model"]')!.value).toBe("gpt-test"); expect(container.querySelector('select[aria-label="Provider"]')!.value).toBe("openai"); monotonic += 30_000; @@ -1158,6 +1315,7 @@ test("Logs: a late body from an aborted old apiBase cannot poison the new proxy test("Logs: aborting an in-flight refresh before pausing cannot replace the accepted clock", async () => { const late = delayedLogBody(); + const urls: string[] = []; let requests = 0; let lateSignal: AbortSignal | undefined; const wall = jest.spyOn(Date, "now").mockReturnValue(PROXY_NOW - 6 * 60 * 60_000); @@ -1166,14 +1324,15 @@ test("Logs: aborting an in-flight refresh before pausing cannot replace the acce const clock = trackFilterClock(); globalThis.fetch = (async (input, init) => { if (!String(input).includes("/api/logs")) return jsonResponse({ timeZone: "UTC" }); + urls.push(String(input)); requests++; if (requests === 2) { lateSignal = init?.signal ?? undefined; return late.response; } - return jsonResponse(proxyLogEnvelope(PROXY_NOW, [ + return jsonResponse(cursorLogEnvelope(PROXY_NOW, String(input).includes("cursor=") ? [] : [ { ...sampleLog, requestId: "current", timestamp: PROXY_NOW - 60_000 }, - ])); + ], "accepted-cursor")); }) as typeof fetch; let mounted: Awaited> | undefined; try { @@ -1187,7 +1346,7 @@ test("Logs: aborting an in-flight refresh before pausing cannot replace the acce await flushMicrotasks(); expect(lateSignal?.aborted).toBe(true); const pausedRequests = requests; - await act(async () => { late.resolve(proxyLogEnvelope(PROXY_NOW + 12 * 60 * 60_000, [])); }); + await act(async () => { late.resolve(cursorLogEnvelope(PROXY_NOW + 12 * 60 * 60_000, [], "poison", true)); }); await flushMicrotasks(); expect(visibleRequestIds(container)).toEqual(["current"]); monotonic += 30_000; @@ -1195,6 +1354,9 @@ test("Logs: aborting an in-flight refresh before pausing cannot replace the acce await flushMicrotasks(); expect(visibleRequestIds(container)).toEqual(["current"]); expect(requests).toBe(pausedRequests); + await act(async () => { container.querySelector(".logs-auto-refresh input")!.click(); }); + await advanceSilentRefresh(); + expect(urls.at(-1)).toContain("cursor=accepted-cursor"); } finally { try { if (mounted) await act(async () => { mounted!.root.unmount(); }); @@ -1244,7 +1406,7 @@ test("Logs: a pending refresh reconciles the user's latest selection rather than globalThis.fetch = (async input => { if (!String(input).includes("/api/logs")) return jsonResponse({ timeZone: "UTC" }); requests++; - return requests === 1 ? jsonResponse(original) : late.response; + return requests === 1 ? jsonResponse(cursorLogEnvelope(PROXY_NOW, original, "initial")) : late.response; }) as typeof fetch; const { root, container } = await mountLogs(); try { @@ -1258,10 +1420,10 @@ test("Logs: a pending refresh reconciles the user's latest selection rather than await changeLogSelect(container, "Status", "errors"); expect(visibleRequestIds(container)).toEqual(["b"]); await act(async () => { - late.resolve([ + late.resolve(cursorLogEnvelope(PROXY_NOW, [ { ...original[0]!, requestId: "other", model: "model-other" }, { ...original[1]!, requestId: "current", model: "MODEL-B", provider: "XAI" }, - ]); + ], "replaced", true)); }); await flushMicrotasks(); expect(container.querySelector('select[aria-label="Model"]')!.value).toBe("MODEL-B"); diff --git a/src/server/management/logs-usage-routes.ts b/src/server/management/logs-usage-routes.ts index dfb3c74df0..ecbd6f655d 100644 --- a/src/server/management/logs-usage-routes.ts +++ b/src/server/management/logs-usage-routes.ts @@ -66,6 +66,7 @@ import { import type { OcxClaudeCodeConfig, OcxConfig, OcxCustomModel, OcxProviderConfig } from "../../types"; import { drainAndShutdown } from "../lifecycle"; import { filterRequestLogs, filteredRequestLogCount, getRequestLogEntries, type RequestLogEntry } from "../request-log"; +import { decodeRequestLogCursor, selectRequestLogPoll } from "../request-log-cursor"; import { estimateComboCost, estimateRequestCost, normalizeCostTokens, tokensPerSecond } from "../../usage/cost"; import { userCostOverlayVersion } from "../../usage/user-cost-overlays"; import type { PersistedUsageAttempt } from "../../usage/log"; @@ -106,14 +107,20 @@ export async function handleLogsUsageRoutes(ctx: ManagementContext): Promise MAX_CURSOR_LENGTH || !/^[A-Za-z0-9_-]+$/.test(raw)) return null; + try { + const bytes = Buffer.from(raw, "base64url"); + if (bytes.toString("base64url") !== raw) return null; + const value: unknown = JSON.parse(bytes.toString("utf8")); + if (!value || typeof value !== "object" || Array.isArray(value)) return null; + const row = value as Record; + const keys = Object.keys(row).sort().join(","); + if (row.v === 1 && keys === "id,t,v" + && typeof row.t === "number" && Number.isFinite(row.t) && row.t >= 0 + && typeof row.id === "string" && row.id.length > 0 && row.id.length <= 256) { + return { v: 1, t: row.t, id: row.id }; + } + if (row.v !== 2 || keys !== "e,h,n,q,v" + || typeof row.e !== "string" || !/^[a-f0-9]{32}$/.test(row.e) + || typeof row.n !== "number" || !Number.isSafeInteger(row.n) || row.n < 0 || row.n > MAX_WINDOW_ROWS + || typeof row.q !== "string" || !/^[a-f0-9]{64}$/.test(row.q) + || typeof row.h !== "string" || !/^[a-f0-9]{64}$/.test(row.h)) return null; + return { v: 2, e: row.e, n: row.n, q: row.q, h: row.h }; + } catch { + return null; + } +} + +/** + * Compare the current projected window, not ring identities: live entries and + * display-time pricing can change without append. This saves response bytes for + * stable prefixes; DTO projection and hashing still cost O(window bytes). + * No per-client rows or history are retained. The route calls this synchronously + * after projecting the full filtered/paginated window. + */ +export function selectRequestLogPoll( + rows: readonly T[], + params: URLSearchParams, + cursor: RequestLogCursor | null, + epoch = processEpoch, +): { logs: T[]; cursor: string; reset: boolean } { + const query = new URLSearchParams(params); + query.delete("cursor"); + query.sort(); + const queryDigest = createHash("sha256").update(query.toString()).digest("hex"); + const candidate = cursor?.v === 2 && cursor.e === epoch && cursor.q === queryDigest + && cursor.n <= rows.length ? cursor : null; + const full = createHash("sha256"); + const prefix = createHash("sha256"); + for (let index = 0; index < rows.length; index++) { + // JSON escapes embedded newlines, so the delimiter frames each whole row. + const serialized = JSON.stringify(rows[index]) + "\n"; + full.update(serialized); + if (candidate && index < candidate.n) prefix.update(serialized); + } + const unchangedPrefix = candidate !== null && prefix.digest("hex") === candidate.h; + const next: SnapshotCursor = { v: 2, e: epoch, n: rows.length, q: queryDigest, h: full.digest("hex") }; + return { + logs: rows.slice(unchangedPrefix ? candidate.n : 0), + cursor: Buffer.from(JSON.stringify(next)).toString("base64url"), + reset: cursor !== null && !unchangedPrefix, + }; +} diff --git a/tests/server/management-api-logs-metrics.test.ts b/tests/server/management-api-logs-metrics.test.ts index 76fbd8024e..f811810809 100644 --- a/tests/server/management-api-logs-metrics.test.ts +++ b/tests/server/management-api-logs-metrics.test.ts @@ -7,6 +7,7 @@ import { usageLogPath } from "../../src/usage/log"; import { addRequestLog, clearRequestLogsForTests, + evictOldestRequestLogForBudget, getRequestLogEntries, type RequestLogEntry, } from "../../src/server/request-log"; @@ -14,6 +15,30 @@ import type { OcxConfig } from "../../src/types"; import { buildRouteDecisionTrace } from "../../src/routing/trace"; import { summarizeUsage } from "../../src/usage/summary"; import { removeTreeWithRetry } from "../helpers/remove-tree"; +import { refreshUserCostOverlays } from "../../src/usage/user-cost-overlays"; + +interface LogPollEnvelope { + logs: Array>; + cursor: string; + reset: boolean; + generatedAt: number; + timeZone: string; + total: number; +} + +async function readLogPoll(query = "", cursor?: string): Promise { + const url = new URL(`http://localhost/api/logs?${query}`); + if (cursor) url.searchParams.set("cursor", cursor); + const before = Date.now(); + const response = await handleManagementAPI(new Request(url), url, config); + expect(response?.status).toBe(200); + const body = await response!.json() as LogPollEnvelope; + expect(body.generatedAt).toBeGreaterThanOrEqual(before); + expect(body.generatedAt).toBeLessThanOrEqual(Date.now()); + expect(body.timeZone).toBe(Intl.DateTimeFormat().resolvedOptions().timeZone); + expect(typeof body.cursor).toBe("string"); + return body; +} const config = { providers: [] } as unknown as OcxConfig; @@ -294,3 +319,115 @@ describe("GET /api/logs display metrics", () => { }); }); import { ManagementRequest as Request } from "../helpers/management-auth"; + + +describe("GET /api/logs snapshot polling", () => { + beforeEach(() => clearRequestLogsForTests()); + + test("poll application equals full reads across append, nested live mutation, eviction and clear", async () => { + let accepted: Array> = []; + let cursor: string | undefined; + const check = async (reset: boolean, deltaLength: number) => { + const poll = await readLogPoll("limit=2000", cursor); + expect(poll.reset).toBe(reset); + expect(poll.logs).toHaveLength(deltaLength); + accepted = !cursor || poll.reset ? poll.logs : [...accepted, ...poll.logs]; + const snapshot = await readLogPoll("limit=2000"); + expect(accepted).toEqual(snapshot.logs); + expect(poll.total).toBe(snapshot.total); + cursor = poll.cursor; + }; + await check(false, 0); + addRequestLog(baseEntry({ requestId: "older", usage: { inputTokens: 10, outputTokens: 5 } })); + await check(false, 1); + await check(false, 0); + addRequestLog(baseEntry({ requestId: "newest", firstOutputMs: 4 })); + await check(false, 1); + getRequestLogEntries()[0]!.usage!.outputTokens = 15; + await check(true, 2); + getRequestLogEntries()[1]!.status = 500; + delete getRequestLogEntries()[1]!.firstOutputMs; + await check(true, 2); + getRequestLogEntries()[0]!.attempts = [{ + ordinal: 1, provider: "anthropic", model: "claude-3-haiku-20240307", adapter: "anthropic", + status: 200, durationMs: 50, sendCount: 1, recoveryKinds: [], usageStatus: "reported", + usage: { inputTokens: 10, outputTokens: 5 }, + }]; + await check(true, 2); + getRequestLogEntries()[0]!.attempts![0]!.usage!.outputTokens = 20; + await check(true, 2); + // The newest cursor anchor survives this real memory-budget eviction. + evictOldestRequestLogForBudget(); + await check(true, 1); + clearRequestLogsForTests(); + await check(true, 0); + await check(false, 0); + }); + + test("pagination/filter changes and shifted windows reset against the full filtered snapshot", async () => { + for (const [requestId, provider] of [["a", "anthropic"], ["b", "openai"], ["c", "anthropic"]] as const) { + addRequestLog(baseEntry({ requestId, provider })); + } + let query = "provider=anthropic&limit=1&offset=1"; + const initial = await readLogPoll(query); + expect(initial.logs.map(row => row.requestId)).toEqual(["a"]); + expect(initial.total).toBe(2); + addRequestLog(baseEntry({ requestId: "d", provider: "anthropic" })); + let poll = await readLogPoll(query, initial.cursor); + expect(poll.reset).toBe(true); + expect(poll.logs).toEqual((await readLogPoll(query)).logs); + expect(poll.logs.map(row => row.requestId)).toEqual(["c"]); + expect(poll.total).toBe(3); + for (const changed of ["provider=openai&limit=1", "tail=2&limit=1", "model=absent", "status=5xx", "conversation=absent"]) { + query = changed; + poll = await readLogPoll(query, poll.cursor); + const full = await readLogPoll(query); + expect(poll.reset).toBe(true); + expect(poll.logs).toEqual(full.logs); + expect(poll.total).toBe(full.total); + } + const filtered = await readLogPoll("provider=openai"); + addRequestLog(baseEntry({ requestId: "not-in-filter", provider: "anthropic" })); + expect(await readLogPoll("provider=openai", filtered.cursor)) + .toMatchObject({ logs: [], reset: false, cursor: filtered.cursor, total: 1 }); + }); + + test("display-time cost changes reset even when raw entries are unchanged", async () => { + const priceConfig: OcxConfig = { port: 0, defaultProvider: "fixture", providers: { fixture: { + adapter: "openai-chat", baseUrl: "https://example.test/v1", models: ["fixture-model"], + modelCosts: { "fixture-model": { input: 1, output: 2, cacheRead: 0, cacheWrite: 0 } }, + } } }; + try { + refreshUserCostOverlays(priceConfig); + addRequestLog(baseEntry({ provider: "fixture", model: "fixture-model", usage: { inputTokens: 100, outputTokens: 10 } })); + const initial = await readLogPoll(); + const rawBefore = structuredClone(getRequestLogEntries()); + priceConfig.providers.fixture!.modelCosts!["fixture-model"]!.output = 20; + refreshUserCostOverlays(priceConfig); + const changed = await readLogPoll("", initial.cursor); + expect(changed.reset).toBe(true); + expect(changed.logs[0]!.displayMetrics).not.toEqual(initial.logs[0]!.displayMetrics); + expect(changed.logs).toEqual((await readLogPoll()).logs); + expect(getRequestLogEntries()).toEqual(rawBefore); + } finally { + refreshUserCostOverlays(config); + } + }); + + test("legacy cursors reset; invalid cursors return generic errors without reflecting input", async () => { + addRequestLog(baseEntry({ requestId: "private-row" })); + const legacy = Buffer.from(JSON.stringify({ v: 1, t: 1, id: "private-row" })).toString("base64url"); + const poll = await readLogPoll("provider=anthropic", legacy); + expect(poll.reset).toBe(true); + const payload = Buffer.from(poll.cursor, "base64url").toString(); + expect(payload).not.toContain("private-row"); + expect(payload).not.toContain("anthropic"); + for (const cursor of ["", "private-invalid-cursor", "x".repeat(513)]) { + const url = new URL("http://localhost/api/logs"); + url.searchParams.set("cursor", cursor); + const response = await handleManagementAPI(new Request(url), url, config); + expect(response?.status).toBe(400); + expect(await response!.json()).toEqual({ error: { code: "invalid_cursor", message: "invalid cursor" } }); + } + }); +}); diff --git a/tests/server/server-management-auth.test.ts b/tests/server/server-management-auth.test.ts index c1bc56f70a..340ad70bd3 100644 --- a/tests/server/server-management-auth.test.ts +++ b/tests/server/server-management-auth.test.ts @@ -1652,3 +1652,63 @@ describe("codex app-server restart routes ride the management gate", () => { } }); }); + + +test("log cursors remain behind management admission and origin gates", async () => { + const config = remoteConfig(); + saveConfig(config); + const state = initializeManagementAuthState(config); + if (!state.available) throw new Error("expected management auth state"); + const server = startServer(0, { managementAuthState: state }); + const origin = server.url.origin; + const token = "ocx_session_log_cursor_test"; + state.sessions.set(token, { + serverOrigin: origin, browserOrigin: origin, csrfToken: "csrf-log-test", + expiresAt: Date.now() + 60_000, issuance: "loopback", + }); + const adminHeaders = { "x-opencodex-api-key": "admin-secret" }; + const acceptedHeaders: HeadersInit[] = [adminHeaders, { + Origin: origin, "x-opencodex-api-key": token, "x-opencodex-gui-origin": origin, + }]; + try { + const initial = await fetch(new URL("/api/logs", server.url), { headers: adminHeaders }); + expect(initial.status).toBe(200); + const body = await initial.json() as { cursor: string }; + expect(typeof body.cursor).toBe("string"); + for (const suffix of ["", `?cursor=${body.cursor}`, "?cursor=malformed"]) { + const url = new URL(`/api/logs${suffix}`, server.url); + for (const credential of [undefined, "data-secret", "wrong-admin"]) { + const response = await fetch(url, { headers: credential ? { "x-opencodex-api-key": credential } : {} }); + expect(response.status).toBe(401); + expect(await response.json()).toEqual({ error: "opencodex admin token required" }); + } + const foreign = await fetch(url, { headers: { ...adminHeaders, Origin: "https://attacker.test" } }); + expect(foreign.status).toBe(403); + await foreign.text(); + for (const headers of acceptedHeaders) { + const allowed = await fetch(url, { headers }); + expect(allowed.status).toBe(suffix.includes("malformed") ? 400 : 200); + await allowed.text(); + } + } + } finally { + await server.stop(true); + } +}, SERVER_BUDGET_MS); + +test("unavailable management authority rejects log cursors before parsing", async () => { + saveConfig(remoteConfig()); + const server = startServer(0, { managementAuthState: { available: false, reason: "fixture unavailable" } }); + try { + const legacy = Buffer.from(JSON.stringify({ v: 1, t: 1, id: "fixture" })).toString("base64url"); + for (const suffix of ["", `?cursor=${legacy}`, "?cursor=malformed"]) { + const response = await fetch(new URL(`/api/logs${suffix}`, server.url), { + headers: { "x-opencodex-api-key": "admin-secret" }, + }); + expect(response.status).toBe(503); + expect(await response.json()).toMatchObject({ error: "management API unavailable" }); + } + } finally { + await server.stop(true); + } +}, SERVER_BUDGET_MS); diff --git a/tests/usage/request-log.test.ts b/tests/usage/request-log.test.ts index 02e26e764b..1a3b4e3264 100644 --- a/tests/usage/request-log.test.ts +++ b/tests/usage/request-log.test.ts @@ -38,6 +38,7 @@ import { mkdtempSync} from "node:fs"; import { tmpdir } from "node:os"; import { join } from "node:path"; import { removeTreeWithRetry } from "../helpers/remove-tree"; +import { decodeRequestLogCursor, selectRequestLogPoll } from "../../src/server/request-log-cursor"; async function* replayAdapterEvents(events: AdapterEvent[]): AsyncGenerator { for (const event of events) yield event; @@ -1808,3 +1809,97 @@ describe("request log restart hydrate", () => { } }); }); + + +describe("request log snapshot cursor", () => { + const epoch = "a".repeat(32); + const query = new URLSearchParams("limit=2000"); + const encode = (value: unknown) => Buffer.from(JSON.stringify(value)).toString("base64url"); + + test("codec bounds and canonical encoding reject malformed or type-confused input", () => { + const poll = selectRequestLogPoll([], query, null, epoch); + const payload = JSON.parse(Buffer.from(poll.cursor, "base64url").toString()); + expect(decodeRequestLogCursor(poll.cursor)).toEqual(payload); + for (const raw of ["", "!", "a".repeat(513), `${poll.cursor}=`, ` ${poll.cursor}`, + encode(null), encode([]), encode({ ...payload, v: 3 }), encode({ ...payload, n: -1 }), + encode({ ...payload, n: 2001 }), encode({ ...payload, n: 0.5 }), encode({ ...payload, n: "0" }), + encode({ ...payload, h: "x".repeat(64) }), encode({ ...payload, q: null }), + encode({ ...payload, e: "short" }), encode({ ...payload, extra: true }), + encode({ v: 1, t: -1, id: "row" }), encode({ v: 1, t: 1, id: "" }), + encode({ v: 1, t: "1", id: "row" }), encode({ v: 1, t: 1, id: "x".repeat(257) })]) { + expect(decodeRequestLogCursor(raw)).toBeNull(); + } + const legacy = decodeRequestLogCursor(encode({ v: 1, t: 1, id: "row" })); + expect(legacy).toEqual({ v: 1, t: 1, id: "row" }); + expect(selectRequestLogPoll([], query, legacy, epoch).reset).toBe(true); + }); + + test("stable empty and populated snapshots produce empty deltas, appends preserve repeated IDs", () => { + const empty = selectRequestLogPoll([], query, null, epoch); + expect(empty.reset).toBe(false); + expect(selectRequestLogPoll([], query, decodeRequestLogCursor(empty.cursor), epoch)).toEqual(empty); + const rows = [log({ requestId: "same" })]; + const first = selectRequestLogPoll(rows, query, decodeRequestLogCursor(empty.cursor), epoch); + expect(first.logs).toEqual(rows); + const cursor = decodeRequestLogCursor(first.cursor); + expect(selectRequestLogPoll(rows, query, cursor, epoch)).toEqual({ ...first, logs: [] }); + rows.push(log({ requestId: "same", status: 500 })); + expect(selectRequestLogPoll(rows, query, cursor, epoch)).toMatchObject({ logs: [rows[1]], reset: false }); + }); + + test("in-place older/newest/nested changes, field removal, reorder and eviction reset the whole window", () => { + const original = [ + log({ requestId: "older", usage: { inputTokens: 10, outputTokens: 5 }, firstOutputMs: 3 }), + log({ requestId: "newest" }), + ]; + const cursor = decodeRequestLogCursor(selectRequestLogPoll(original, query, null, epoch).cursor); + const mutations: Array<(rows: RequestLogEntry[]) => void> = [ + rows => { rows[0]!.status = 500; }, + rows => { rows[1]!.durationMs = 22; }, + rows => { rows[0]!.usage!.outputTokens = 6; }, + rows => { delete rows[0]!.firstOutputMs; }, + rows => { rows[0] = log({ requestId: "replacement" }); }, + rows => { rows.reverse(); }, + rows => { rows.shift(); }, + rows => { rows.length = 0; }, + ]; + for (const mutate of mutations) { + const rows = structuredClone(original); + mutate(rows); + expect(selectRequestLogPoll(rows, query, cursor, epoch)).toMatchObject({ logs: rows, reset: true }); + } + // Same hydrated IDs and values do not make an old process cursor valid. + expect(selectRequestLogPoll(original, query, cursor, "b".repeat(32))) + .toMatchObject({ logs: original, reset: true }); + }); + + test("query identity ignores cursor and parameter ordering but binds filters and pagination", () => { + const rows = [log({ requestId: "private-row", conversationId: "private-conversation" })]; + const first = selectRequestLogPoll(rows, new URLSearchParams("provider=private-provider&limit=1"), null, epoch); + const cursor = decodeRequestLogCursor(first.cursor); + const raw = Buffer.from(first.cursor, "base64url").toString(); + for (const value of ["private-row", "private-conversation", "private-provider"]) expect(raw).not.toContain(value); + expect(selectRequestLogPoll(rows, new URLSearchParams(`limit=1&cursor=${first.cursor}&provider=private-provider`), cursor, epoch).logs) + .toEqual([]); + for (const changed of ["provider=other&limit=1", "provider=private-provider&limit=2", "provider=private-provider&limit=1&offset=1"]) { + expect(selectRequestLogPoll(rows, new URLSearchParams(changed), cursor, epoch).reset).toBe(true); + } + const duplicated = selectRequestLogPoll(rows, new URLSearchParams("provider=a&provider=b"), null, epoch); + expect(selectRequestLogPoll(rows, new URLSearchParams("provider=b&provider=a"), decodeRequestLogCursor(duplicated.cursor), epoch).reset) + .toBe(true); + }); + + test("a full-window rollover resets; a stale fingerprint cannot suppress current rows", () => { + const rows = Array.from({ length: 2000 }, (_, index) => log({ requestId: `row-${index}`, timestamp: 2000 - index })); + const initial = selectRequestLogPoll(rows, query, null, epoch); + const cursor = decodeRequestLogCursor(initial.cursor); + expect(cursor).toMatchObject({ v: 2, n: 2000 }); + rows.shift(); + rows.push(log({ requestId: "new", timestamp: 0 })); + expect(selectRequestLogPoll(rows, query, cursor, epoch)).toMatchObject({ logs: rows, reset: true }); + const payload = JSON.parse(Buffer.from(initial.cursor, "base64url").toString()); + const stale = decodeRequestLogCursor(encode({ ...payload, h: "0".repeat(64) })); + expect(stale).not.toBeNull(); + expect(selectRequestLogPoll(rows, query, stale, epoch)).toMatchObject({ logs: rows, reset: true }); + }); +});