@eddyskywalker/dsh-chatgpt-subscription 0.28.0 → 0.29.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/lib/client.js +274 -149
  3. package/lib/client.js.map +1 -1
  4. package/lib/index.js +125 -21
  5. package/lib/types/client/CodexSubscriptionSection.d.ts.map +1 -1
  6. package/lib/types/client/antigravity/locales.d.ts +11 -2
  7. package/lib/types/client/antigravity/locales.d.ts.map +1 -1
  8. package/lib/types/client/claude/locales.d.ts +11 -2
  9. package/lib/types/client/claude/locales.d.ts.map +1 -1
  10. package/lib/types/client/command-code/locales.d.ts +11 -2
  11. package/lib/types/client/command-code/locales.d.ts.map +1 -1
  12. package/lib/types/client/common/AccountPoolSection.d.ts +10 -2
  13. package/lib/types/client/common/AccountPoolSection.d.ts.map +1 -1
  14. package/lib/types/client/common/account-pool-labels.d.ts +17 -0
  15. package/lib/types/client/common/account-pool-labels.d.ts.map +1 -1
  16. package/lib/types/client/common/format.d.ts +14 -0
  17. package/lib/types/client/common/format.d.ts.map +1 -1
  18. package/lib/types/client/common/styles.d.ts.map +1 -1
  19. package/lib/types/client/glm-coding-plan/locales.d.ts +11 -2
  20. package/lib/types/client/glm-coding-plan/locales.d.ts.map +1 -1
  21. package/lib/types/client/glm-coding-plan/useGlmCodingPlanSection.d.ts.map +1 -1
  22. package/lib/types/client/kimi-code/locales.d.ts +11 -2
  23. package/lib/types/client/kimi-code/locales.d.ts.map +1 -1
  24. package/lib/types/client/locales.d.ts +7 -1
  25. package/lib/types/client/locales.d.ts.map +1 -1
  26. package/lib/types/client/minimax-code/locales.d.ts +11 -2
  27. package/lib/types/client/minimax-code/locales.d.ts.map +1 -1
  28. package/lib/types/client/minimax-code/useMinimaxCodeSection.d.ts.map +1 -1
  29. package/lib/types/client/ollama/locales.d.ts +18 -0
  30. package/lib/types/client/ollama/locales.d.ts.map +1 -1
  31. package/lib/types/client/progress-updates/index.d.ts.map +1 -1
  32. package/lib/types/client/step-code/locales.d.ts +11 -2
  33. package/lib/types/client/step-code/locales.d.ts.map +1 -1
  34. package/lib/types/client/step-code/useStepCodeSection.d.ts.map +1 -1
  35. package/lib/types/client/workbuddy/locales.d.ts +6 -0
  36. package/lib/types/client/workbuddy/locales.d.ts.map +1 -1
  37. package/lib/types/client/workbuddy/useWorkBuddySection.d.ts.map +1 -1
  38. package/lib/types/host/antigravity/account-pool.d.ts +17 -3
  39. package/lib/types/host/antigravity/account-pool.d.ts.map +1 -1
  40. package/lib/types/host/antigravity/adapter.d.ts +7 -2
  41. package/lib/types/host/antigravity/adapter.d.ts.map +1 -1
  42. package/lib/types/host/workbuddy/account-pool.d.ts +24 -0
  43. package/lib/types/host/workbuddy/account-pool.d.ts.map +1 -1
  44. package/lib/types/index.d.ts +2 -2
  45. package/lib/types/index.d.ts.map +1 -1
  46. package/lib/types/shared/account-pool-contracts.d.ts +24 -0
  47. package/lib/types/shared/account-pool-contracts.d.ts.map +1 -1
  48. package/package.json +1 -1
package/lib/index.js CHANGED
@@ -7425,6 +7425,8 @@ function antigravityPoolQuota(quota) {
7425
7425
  }
7426
7426
  return poolQuota(quota.fetchedAt, windows);
7427
7427
  }
7428
+ /** How much of the upstream detail the family guard quotes in its message. */
7429
+ const MAX_DETAIL_CHARS = 500;
7428
7430
  /**
7429
7431
  * Antigravity's account pool.
7430
7432
  *
@@ -7572,11 +7574,19 @@ var AccountPoolStore = class {
7572
7574
  familyKey(accountId, family) {
7573
7575
  return `${family}\u0000${accountId}`;
7574
7576
  }
7575
- /** Cool one account down for one quota family after an upstream 429. */
7576
- markFamilyCooldown(accountId, family, durationMs, reason) {
7577
+ /**
7578
+ * Cool one account down for one quota family after an upstream 429.
7579
+ *
7580
+ * `detail` is what the upstream actually said, kept beside the cooldown it
7581
+ * caused: the pool sentence the guard raises is about the pool, and the
7582
+ * upstream statement is the only part that tells the user WHY the request
7583
+ * was refused.
7584
+ */
7585
+ markFamilyCooldown(accountId, family, durationMs, reason, detail) {
7577
7586
  this.familyCooldowns.set(this.familyKey(accountId, family), {
7578
7587
  until: Date.now() + Math.max(1e3, durationMs),
7579
- reason
7588
+ reason,
7589
+ ...detail === void 0 || detail === "" ? {} : { detail }
7580
7590
  });
7581
7591
  }
7582
7592
  /** Accounts whose allowance for this family is still cooling down. */
@@ -7590,11 +7600,26 @@ var AccountPoolStore = class {
7590
7600
  }
7591
7601
  return ids;
7592
7602
  }
7593
- shortestFamilyCooldownMs(family, now = Date.now()) {
7594
- let shortest = Infinity;
7603
+ /**
7604
+ * The family cooldown that expires soonest, with the account it belongs to.
7605
+ *
7606
+ * The wait the guard reports and the upstream detail it quotes come from
7607
+ * this ONE entry: two separate scans could pick different accounts, and the
7608
+ * message would then name a wait for one cooldown and a reason for another.
7609
+ */
7610
+ soonestFamilyCooldown(family, now = Date.now()) {
7611
+ let soonest;
7595
7612
  const prefix = `${family}\u0000`;
7596
- for (const [key, entry] of this.familyCooldowns) if (key.startsWith(prefix) && entry.until > now) shortest = Math.min(shortest, entry.until - now);
7597
- return Number.isFinite(shortest) ? shortest : null;
7613
+ for (const [key, entry] of this.familyCooldowns) {
7614
+ if (!key.startsWith(prefix) || entry.until <= now) continue;
7615
+ if (soonest === void 0 || entry.until < soonest.until) soonest = {
7616
+ accountId: key.slice(prefix.length),
7617
+ until: entry.until,
7618
+ reason: entry.reason,
7619
+ ...entry.detail === void 0 ? {} : { detail: entry.detail }
7620
+ };
7621
+ }
7622
+ return soonest ?? null;
7598
7623
  }
7599
7624
  /**
7600
7625
  * {@link getEffectiveAccount} for one quota family: accounts whose allowance
@@ -7611,8 +7636,11 @@ var AccountPoolStore = class {
7611
7636
  return await this.getEffectiveAccount(exclude, fetchFn);
7612
7637
  } catch (error) {
7613
7638
  if (cooling.size === 0 || !(error instanceof LlmError) || error.code !== "RATE_LIMIT") throw error;
7614
- const wait = this.shortestFamilyCooldownMs(family);
7615
- throw new LlmError(`全部可用 Antigravity 账号的 ${family === "gemini" ? "Gemini" : "Claude / GPT"} 配额均处于限制或冷却中 (429)。` + (wait === null ? "" : `最短预计在 ${Math.ceil(wait / 6e4)} 分钟后解除冷却。`) + "其他模型族的配额不受影响,可切换到其他模型族继续使用。", "RATE_LIMIT", {
7639
+ const soonest = this.soonestFamilyCooldown(family);
7640
+ const wait = soonest === null ? null : soonest.until - Date.now();
7641
+ const label = family === "gemini" ? "Gemini" : "Claude / GPT";
7642
+ const detail = soonest?.detail;
7643
+ throw new LlmError(`全部可用 Antigravity 账号的 ${label} 配额均处于限制或冷却中 (429)。` + (wait === null ? "" : `最短预计在 ${Math.ceil(wait / 6e4)} 分钟后解除冷却。`) + (detail === void 0 || detail === "" ? "" : `上游返回:${detail.length > MAX_DETAIL_CHARS ? `${detail.slice(0, MAX_DETAIL_CHARS)}…` : detail}`) + "其他模型族的配额不受影响,可切换到其他模型族继续使用。", "RATE_LIMIT", {
7616
7644
  status: 429,
7617
7645
  cause: error
7618
7646
  });
@@ -7635,6 +7663,18 @@ function resolveDefaultReasoningEffort$4(efforts, configuredEffort) {
7635
7663
  if (efforts.includes("low")) return ReasoningEffortId("low");
7636
7664
  if (efforts.length > 0) return ReasoningEffortId(efforts[0]);
7637
7665
  }
7666
+ /** How much of an upstream error body is quoted back to the user. */
7667
+ const MAX_UPSTREAM_BODY_CHARS = 500;
7668
+ /**
7669
+ * The upstream error body, short enough to read in a notice.
7670
+ *
7671
+ * A 429 body is small when the service states a reset time in it and can be an
7672
+ * arbitrary blob when it does not, so the excerpt is what a notice carries.
7673
+ */
7674
+ function upstreamBodyExcerpt(body) {
7675
+ const text = body.trim();
7676
+ return text.length > MAX_UPSTREAM_BODY_CHARS ? `${text.slice(0, MAX_UPSTREAM_BODY_CHARS)}…` : text;
7677
+ }
7638
7678
  /**
7639
7679
  * Milliseconds in one duration string: protobuf JSON (`"12.5s"`) or Go form
7640
7680
  * (`"1h2m3.5s"`, `"373.8ms"`). Undefined when the string is neither.
@@ -7894,6 +7934,7 @@ var AntigravityAdapter = class extends LlmAdapter {
7894
7934
  ...antigravityHeaders(token),
7895
7935
  ...model.id.startsWith("claude-") ? { "anthropic-beta": "interleaved-thinking-2025-05-14" } : {}
7896
7936
  };
7937
+ let firstResponse;
7897
7938
  for (const endpoint of endpointCandidates()) try {
7898
7939
  let sentBody = body;
7899
7940
  response = await fetchFn(`${endpoint}/v1internal:streamGenerateContent?alt=sse`, {
@@ -7959,23 +8000,34 @@ var AntigravityAdapter = class extends LlmAdapter {
7959
8000
  });
7960
8001
  }
7961
8002
  }
8003
+ if (firstResponse === void 0) firstResponse = response;
7962
8004
  if (response.ok || response.status === 400) break;
7963
8005
  if (response.status === 404) break;
8006
+ if (response.status === 429) {
8007
+ response = firstResponse;
8008
+ break;
8009
+ }
8010
+ response = firstResponse;
7964
8011
  } catch (err) {
7965
8012
  if (signal.aborted) throw new LlmError("Antigravity request aborted", "ABORTED", { cause: err });
7966
8013
  }
7967
8014
  if (response && response.status === 429) {
7968
8015
  const errorBody = await response.clone().text().catch(() => "");
7969
- const cooldownMs = retryDelayMs(response.headers, errorBody) ?? 9e5;
7970
- this.accountPool.markFamilyCooldown(account.id, family, cooldownMs, "429 Rate Limit");
7971
- if (await this.accountPool.hasAnotherAvailableAccountFor(family, triedAccountIds)) continue;
8016
+ const statedWaitMs = retryDelayMs(response.headers, errorBody);
8017
+ if (statedWaitMs !== void 0) {
8018
+ this.accountPool.markFamilyCooldown(account.id, family, statedWaitMs, "429 Rate Limit", upstreamBodyExcerpt(errorBody));
8019
+ if (await this.accountPool.hasAnotherAvailableAccountFor(family, triedAccountIds)) continue;
8020
+ }
7972
8021
  }
7973
8022
  break;
7974
8023
  }
7975
8024
  if (!response || !response.ok) {
7976
8025
  const status = response?.status ?? 500;
7977
- const errText = await response?.text().catch(() => "");
7978
- if (status === 429) throw new LlmError(`Antigravity 账号配额已耗尽或请求受限 (429 RESOURCE_EXHAUSTED)。请在插件设置页查看配额剩余百分比及重置倒计时。原始响应: ${errText || "No response"}`, "RATE_LIMIT", { status: 429 });
8026
+ const errText = await response?.text().catch(() => "") ?? "";
8027
+ if (response && response.status === 429) {
8028
+ if (retryDelayMs(response.headers, errText) !== void 0) throw new LlmError(`Antigravity 账号配额已耗尽或请求受限 (429 RESOURCE_EXHAUSTED)。请在插件设置页查看配额剩余百分比及重置倒计时。原始响应: ${errText || "No response"}`, "RATE_LIMIT", { status: 429 });
8029
+ throw new LlmError(`Antigravity 上游返回 429 (RESOURCE_EXHAUSTED) 但未给出重置时间,因此按瞬时限流处理,不视为账号配额耗尽,也不会冷却该账号。原始响应: ${upstreamBodyExcerpt(errText) || "No response"}`, "SERVER", { status: 429 });
8030
+ }
7979
8031
  throw new LlmError(`Antigravity API error (${status}): ${errText || "No response"}`, isHttpContextOverflow(status, errText) ? CONTEXT_OVERFLOW_CODE : "PROVIDER_ERROR", { status });
7980
8032
  }
7981
8033
  if (!response.body) throw new LlmError("Antigravity returned empty response body", "PROVIDER_ERROR");
@@ -8333,6 +8385,7 @@ async function requestImage(accountPool, store, fetchFn, prompt, aspectRatio, si
8333
8385
  tried.add(account.id);
8334
8386
  const body = JSON.stringify(buildImageRequest(prompt, projectId || "antigravity-default", aspectRatio));
8335
8387
  let response;
8388
+ let firstResponse;
8336
8389
  for (const endpoint of endpointCandidates()) try {
8337
8390
  response = await fetchFn(`${endpoint}/v1internal:streamGenerateContent?alt=sse`, {
8338
8391
  method: "POST",
@@ -8340,7 +8393,13 @@ async function requestImage(accountPool, store, fetchFn, prompt, aspectRatio, si
8340
8393
  body,
8341
8394
  signal
8342
8395
  });
8396
+ if (firstResponse === void 0) firstResponse = response;
8343
8397
  if (response.ok || response.status === 400 || response.status === 404) break;
8398
+ if (response.status === 429) {
8399
+ response = firstResponse;
8400
+ break;
8401
+ }
8402
+ response = firstResponse;
8344
8403
  } catch (error) {
8345
8404
  if (signal.aborted) throw error;
8346
8405
  }
@@ -8348,10 +8407,13 @@ async function requestImage(accountPool, store, fetchFn, prompt, aspectRatio, si
8348
8407
  const status = response?.status;
8349
8408
  const errorText = await response?.text().catch(() => "") ?? "";
8350
8409
  if (status === 429 && response) {
8351
- const cooldownMs = retryDelayMs(response.headers, errorText) ?? 9e5;
8352
- accountPool.markFamilyCooldown(account.id, "gemini", cooldownMs, "429 Rate Limit");
8353
- if (await accountPool.hasAnotherAvailableAccountFor("gemini", tried)) continue;
8354
- throw new HarnessError(`Antigravity image generation was rate limited. ${errorText}`.trim(), "ANTIGRAVITY_IMAGE_RATE_LIMITED");
8410
+ const statedWaitMs = retryDelayMs(response.headers, errorText);
8411
+ if (statedWaitMs !== void 0) {
8412
+ accountPool.markFamilyCooldown(account.id, "gemini", statedWaitMs, "429 Rate Limit", upstreamBodyExcerpt(errorText));
8413
+ if (await accountPool.hasAnotherAvailableAccountFor("gemini", tried)) continue;
8414
+ throw new HarnessError(`Antigravity image generation was rate limited. ${errorText}`.trim(), "ANTIGRAVITY_IMAGE_RATE_LIMITED");
8415
+ }
8416
+ throw new HarnessError(`Antigravity image generation was rate limited (429) without a stated reset time, so it is handled as a transient rate limit rather than a spent quota. ${upstreamBodyExcerpt(errorText)}`.trim(), "ANTIGRAVITY_IMAGE_RATE_LIMITED");
8355
8417
  }
8356
8418
  throw new HarnessError(`Antigravity image generation failed (${status ?? "no response"}).${errorText ? ` ${errorText}` : ""}`, "ANTIGRAVITY_IMAGE_FAILED");
8357
8419
  }
@@ -38596,7 +38658,7 @@ var WorkBuddyAccountPool = class extends AccountPoolCore {
38596
38658
  return refreshed;
38597
38659
  },
38598
38660
  refreshFailureStatus: (error) => error instanceof LlmError && error.code === "INVALID_CREDENTIAL" ? "expired" : void 0,
38599
- extendSummary: (account, base) => ({
38661
+ extendSummary: (account, base, now) => ({
38600
38662
  ...base,
38601
38663
  region: account.region ?? account.credentials.region,
38602
38664
  source: account.source,
@@ -38611,6 +38673,10 @@ var WorkBuddyAccountPool = class extends AccountPoolCore {
38611
38673
  ...(() => {
38612
38674
  const quota = quotaFor(account.id);
38613
38675
  return quota === void 0 ? {} : { quota };
38676
+ })(),
38677
+ ...(() => {
38678
+ const modelCooldowns = this.liveModelCooldowns(account.id, now);
38679
+ return modelCooldowns.length === 0 ? {} : { modelCooldowns };
38614
38680
  })()
38615
38681
  }),
38616
38682
  preferAccountId: () => this.resolveSelectionId(options.selection?.().selectedAccountId ?? null),
@@ -38788,6 +38854,44 @@ var WorkBuddyAccountPool = class extends AccountPoolCore {
38788
38854
  const until = this.modelCooldowns.get(accountId)?.get(model);
38789
38855
  return until !== void 0 && until > now ? until : void 0;
38790
38856
  }
38857
+ /**
38858
+ * The models this account is parked on right now, with the instant each park
38859
+ * lifts.
38860
+ *
38861
+ * Only LIVE parks are reported: a window that has passed is dropped here, so
38862
+ * the card never shows a model that may already serve. The lift instant is
38863
+ * the one the upstream named, stored verbatim by
38864
+ * {@link markModelCooldown}; it is never recomputed from a duration that has
38865
+ * since drifted, because a re-derived instant would drift with it.
38866
+ */
38867
+ liveModelCooldowns(accountId, now) {
38868
+ const models = this.modelCooldowns.get(accountId);
38869
+ if (models === void 0) return [];
38870
+ const live = [];
38871
+ for (const [model, until] of models) if (until > now) live.push({
38872
+ model,
38873
+ cooldownUntil: until
38874
+ });
38875
+ else models.delete(model);
38876
+ if (models.size === 0) this.modelCooldowns.delete(accountId);
38877
+ return live;
38878
+ }
38879
+ /**
38880
+ * Clear one account's cooldown AND the models it is parked on.
38881
+ *
38882
+ * The card's "reset cooldown" button promises the account is usable again. A
38883
+ * model park is a cooldown too — the account stays eligible, but it still
38884
+ * refuses the model the request wants — so leaving the park behind would
38885
+ * report a reset that did not happen, and the park would outlive the only
38886
+ * control the user has over it.
38887
+ *
38888
+ * The base write comes first: it is the half that can fail, and a failed
38889
+ * write must leave the account's state as it was rather than half-cleared.
38890
+ */
38891
+ async clearCooldown(accountId) {
38892
+ await super.clearCooldown(accountId);
38893
+ this.modelCooldowns.delete(accountId);
38894
+ }
38791
38895
  /** Accounts currently parked on one model, with lifted entries pruned on the way. */
38792
38896
  parkedAccountIds(model, now = Date.now()) {
38793
38897
  const parked = /* @__PURE__ */ new Set();
@@ -62545,7 +62649,7 @@ function resolveProgressUpdatesSettings(config) {
62545
62649
  const enabled = readProgressConfigField(config?.progressUpdates);
62546
62650
  const threshold = readProgressConfigField(config?.progressUpdatesNudgeThreshold);
62547
62651
  return {
62548
- enabled: enabled === true,
62652
+ enabled: enabled !== false,
62549
62653
  nudgeThreshold: typeof threshold === "number" && Number.isSafeInteger(threshold) && threshold > 0 ? threshold : 8
62550
62654
  };
62551
62655
  }
@@ -62745,7 +62849,7 @@ const Config = z.object({
62745
62849
  reasoningCollapseGuard: z.union([z.object({}), z.const(false)]).default(false),
62746
62850
  noAnswerResume: z.union([z.object({}), z.const(false)]).default({}),
62747
62851
  codexStreamIdleTimeoutMs: z.number().min(1).max(MAX_TIMER_DELAY_MS).step(1).default(DEFAULT_STREAM_IDLE_TIMEOUT_MS),
62748
- progressUpdates: z.boolean().default(false).volatile().description("启用进展更新:允许 agent 用 progress_update 工具主动汇报多步任务的进展,并在侧栏展示。"),
62852
+ progressUpdates: z.boolean().default(true).volatile().description("启用进展更新:允许 agent 用 progress_update 工具主动汇报多步任务的进展,并在侧栏展示。"),
62749
62853
  progressUpdatesNudgeThreshold: z.number().step(1).min(1).max(50).default(8).volatile().description("催促阈值:连续这么多轮带工具调用却没有进展更新时,提醒 agent 发一条进展。")
62750
62854
  });
62751
62855
  const inject = [
@@ -1 +1 @@
1
- {"version":3,"file":"CodexSubscriptionSection.d.ts","sourceRoot":"","sources":["../../../src/client/CodexSubscriptionSection.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;AACjF,OAAO,KAAK,EAAyB,eAAe,EAAkB,cAAc,EAA8D,MAAM,wBAAwB,CAAA;AAShL,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAA;AAGjC,KAAK,KAAK,GAAG,YAAY,CAAC,kBAAkB,CAAC,GAAG,WAAW,CAAC,OAAO,EAAE,CAAC,CAAA;AACtE,KAAK,UAAU,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,cAAc,GAAG,MAAM,GAAG,QAAQ,GAAG,aAAa,GAC9F,aAAa,GAAG,QAAQ,GAAG,gBAAgB,GAAG,UAAU,GAAG,OAAO,GAAG,eAAe,GAAG,IAAI,CAAA;AAC/F,KAAK,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,CAAA;AAE3B,wBAAgB,wBAAwB,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAyoBxE;AA+BD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,uBAAuB,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE;IAAE,MAAM,EAAE,eAAe,GAAG,IAAI,GAAG,SAAS,CAAC;IAAC,CAAC,EAAE,SAAS,CAAA;CAAE,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CA4B7I;AAWD,wBAAgB,gBAAgB,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IAAE,YAAY,EAAE,WAAW,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;IAAC,IAAI,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAAC,CAAC,EAAE,SAAS,CAAA;CAAE,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAUzN;AAED,wBAAgB,QAAQ,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,cAAc,CAAC;IAAC,CAAC,EAAE,SAAS,CAAA;CAAE,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAczH;AAMD,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,CAAC,EAAE,SAAS,GAAG,MAAM,CAYpF;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOlE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,gBAAgB,SAA4B,GAAG,MAAM,GAAG,IAAI,CAGxG;AAoCD,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,CAgBtE"}
1
+ {"version":3,"file":"CodexSubscriptionSection.d.ts","sourceRoot":"","sources":["../../../src/client/CodexSubscriptionSection.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;AACjF,OAAO,KAAK,EAAyB,eAAe,EAAkB,cAAc,EAA8D,MAAM,wBAAwB,CAAA;AAShL,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAA;AAGjC,KAAK,KAAK,GAAG,YAAY,CAAC,kBAAkB,CAAC,GAAG,WAAW,CAAC,OAAO,EAAE,CAAC,CAAA;AACtE,KAAK,UAAU,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,cAAc,GAAG,MAAM,GAAG,QAAQ,GAAG,aAAa,GAC9F,aAAa,GAAG,QAAQ,GAAG,gBAAgB,GAAG,UAAU,GAAG,OAAO,GAAG,eAAe,GAAG,IAAI,CAAA;AAC/F,KAAK,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,CAAA;AAE3B,wBAAgB,wBAAwB,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CA4oBxE;AA+BD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,uBAAuB,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE;IAAE,MAAM,EAAE,eAAe,GAAG,IAAI,GAAG,SAAS,CAAC;IAAC,CAAC,EAAE,SAAS,CAAA;CAAE,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CA4B7I;AAWD,wBAAgB,gBAAgB,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IAAE,YAAY,EAAE,WAAW,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;IAAC,IAAI,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAAC,CAAC,EAAE,SAAS,CAAA;CAAE,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAUzN;AAED,wBAAgB,QAAQ,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,cAAc,CAAC;IAAC,CAAC,EAAE,SAAS,CAAA;CAAE,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAczH;AAMD,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,CAAC,EAAE,SAAS,GAAG,MAAM,CAYpF;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOlE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,gBAAgB,SAA4B,GAAG,MAAM,GAAG,IAAI,CAGxG;AAoCD,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,CAgBtE"}
@@ -77,6 +77,9 @@ export declare const zh: {
77
77
  tokens: string;
78
78
  accountCount: string;
79
79
  cooldownLeft: string;
80
+ cooldownRemaining: string;
81
+ cooldownRemainingSeconds: string;
82
+ modelCooldown: string;
80
83
  needsRelogin: string;
81
84
  relogin: string;
82
85
  email: string;
@@ -171,6 +174,9 @@ export declare const dictionaries: {
171
174
  tokens: string;
172
175
  accountCount: string;
173
176
  cooldownLeft: string;
177
+ cooldownRemaining: string;
178
+ cooldownRemainingSeconds: string;
179
+ modelCooldown: string;
174
180
  needsRelogin: string;
175
181
  relogin: string;
176
182
  email: string;
@@ -263,6 +269,9 @@ export declare const dictionaries: {
263
269
  tokens: string;
264
270
  accountCount: string;
265
271
  cooldownLeft: string;
272
+ cooldownRemaining: string;
273
+ cooldownRemainingSeconds: string;
274
+ modelCooldown: string;
266
275
  needsRelogin: string;
267
276
  relogin: string;
268
277
  email: string;
@@ -277,8 +286,8 @@ export declare const dictionaries: {
277
286
  quotaFactsScope: string;
278
287
  composerLabel: string;
279
288
  };
280
- en: Record<"account" | "rotationStrategy" | "accountId" | "relogin" | "tokens" | "title" | "signedOut" | "signedIn" | "plan" | "expires" | "signIn" | "signInAgain" | "signOut" | "refreshToken" | "loading" | "connection" | "selectAll" | "unselectAll" | "modelsHint" | "contextWindowReset" | "contextWindowResetAll" | "contextWindowResetAllConfirm" | "save" | "refreshQuota" | "accountPool" | "addAccount" | "accountCount" | "primaryAccount" | "activeAccount" | "setPrimary" | "deleteAccount" | "cooling" | "cooldownLeft" | "clearCooldown" | "needsRelogin" | "strategySequential" | "strategyRoundRobin" | "strategySticky" | "noAccounts" | "email" | "lastUsed" | "accountQuota" | "quotaNone" | "quotaSnapshot" | "quotaResets" | "quotaExhausted" | "quotaWindow" | "quotaUsed" | "quotaFactsScope" | "composerLabel" | "pageDesc" | "signingIn" | "modelsSection" | "enhanced" | "defaultReasoningEffort" | "defaultReasoningEffortHint" | "defaultEffortAuto" | "contextWindowSection" | "contextWindowHint" | "contextWindowNoneEnabled" | "saved" | "saving" | "cacheSection" | "cacheDesc" | "cacheEmpty" | "cacheHitRatio" | "cacheCached" | "cacheFresh" | "cacheRequests" | "cacheMiss" | "cacheMissIdle" | "cacheDriftNone" | "cacheDriftContents" | "cacheDriftSystemInstruction" | "cacheDriftTools" | "cacheDriftSessionId" | "cacheDriftNewSession" | "quotaSection" | "quotaDesc" | "refreshingQuota" | "quotaEmpty" | "googleValidation" | "resetPrefix" | "resetUnavailable" | "resetNow" | "timeDayHour" | "timeHourMin" | "timeMin" | "updatedAt" | "loginFailed", string>;
281
- 'en-US': Record<"account" | "rotationStrategy" | "accountId" | "relogin" | "tokens" | "title" | "signedOut" | "signedIn" | "plan" | "expires" | "signIn" | "signInAgain" | "signOut" | "refreshToken" | "loading" | "connection" | "selectAll" | "unselectAll" | "modelsHint" | "contextWindowReset" | "contextWindowResetAll" | "contextWindowResetAllConfirm" | "save" | "refreshQuota" | "accountPool" | "addAccount" | "accountCount" | "primaryAccount" | "activeAccount" | "setPrimary" | "deleteAccount" | "cooling" | "cooldownLeft" | "clearCooldown" | "needsRelogin" | "strategySequential" | "strategyRoundRobin" | "strategySticky" | "noAccounts" | "email" | "lastUsed" | "accountQuota" | "quotaNone" | "quotaSnapshot" | "quotaResets" | "quotaExhausted" | "quotaWindow" | "quotaUsed" | "quotaFactsScope" | "composerLabel" | "pageDesc" | "signingIn" | "modelsSection" | "enhanced" | "defaultReasoningEffort" | "defaultReasoningEffortHint" | "defaultEffortAuto" | "contextWindowSection" | "contextWindowHint" | "contextWindowNoneEnabled" | "saved" | "saving" | "cacheSection" | "cacheDesc" | "cacheEmpty" | "cacheHitRatio" | "cacheCached" | "cacheFresh" | "cacheRequests" | "cacheMiss" | "cacheMissIdle" | "cacheDriftNone" | "cacheDriftContents" | "cacheDriftSystemInstruction" | "cacheDriftTools" | "cacheDriftSessionId" | "cacheDriftNewSession" | "quotaSection" | "quotaDesc" | "refreshingQuota" | "quotaEmpty" | "googleValidation" | "resetPrefix" | "resetUnavailable" | "resetNow" | "timeDayHour" | "timeHourMin" | "timeMin" | "updatedAt" | "loginFailed", string>;
289
+ en: Record<"account" | "rotationStrategy" | "accountId" | "relogin" | "tokens" | "title" | "signedOut" | "signedIn" | "plan" | "expires" | "signIn" | "signInAgain" | "signOut" | "refreshToken" | "loading" | "connection" | "selectAll" | "unselectAll" | "modelsHint" | "contextWindowReset" | "contextWindowResetAll" | "contextWindowResetAllConfirm" | "save" | "refreshQuota" | "accountPool" | "addAccount" | "accountCount" | "primaryAccount" | "activeAccount" | "setPrimary" | "deleteAccount" | "cooling" | "cooldownLeft" | "cooldownRemaining" | "cooldownRemainingSeconds" | "modelCooldown" | "clearCooldown" | "needsRelogin" | "strategySequential" | "strategyRoundRobin" | "strategySticky" | "noAccounts" | "email" | "lastUsed" | "accountQuota" | "quotaNone" | "quotaSnapshot" | "quotaResets" | "quotaExhausted" | "quotaWindow" | "quotaUsed" | "quotaFactsScope" | "composerLabel" | "pageDesc" | "signingIn" | "modelsSection" | "enhanced" | "defaultReasoningEffort" | "defaultReasoningEffortHint" | "defaultEffortAuto" | "contextWindowSection" | "contextWindowHint" | "contextWindowNoneEnabled" | "saved" | "saving" | "cacheSection" | "cacheDesc" | "cacheEmpty" | "cacheHitRatio" | "cacheCached" | "cacheFresh" | "cacheRequests" | "cacheMiss" | "cacheMissIdle" | "cacheDriftNone" | "cacheDriftContents" | "cacheDriftSystemInstruction" | "cacheDriftTools" | "cacheDriftSessionId" | "cacheDriftNewSession" | "quotaSection" | "quotaDesc" | "refreshingQuota" | "quotaEmpty" | "googleValidation" | "resetPrefix" | "resetUnavailable" | "resetNow" | "timeDayHour" | "timeHourMin" | "timeMin" | "updatedAt" | "loginFailed", string>;
290
+ 'en-US': Record<"account" | "rotationStrategy" | "accountId" | "relogin" | "tokens" | "title" | "signedOut" | "signedIn" | "plan" | "expires" | "signIn" | "signInAgain" | "signOut" | "refreshToken" | "loading" | "connection" | "selectAll" | "unselectAll" | "modelsHint" | "contextWindowReset" | "contextWindowResetAll" | "contextWindowResetAllConfirm" | "save" | "refreshQuota" | "accountPool" | "addAccount" | "accountCount" | "primaryAccount" | "activeAccount" | "setPrimary" | "deleteAccount" | "cooling" | "cooldownLeft" | "cooldownRemaining" | "cooldownRemainingSeconds" | "modelCooldown" | "clearCooldown" | "needsRelogin" | "strategySequential" | "strategyRoundRobin" | "strategySticky" | "noAccounts" | "email" | "lastUsed" | "accountQuota" | "quotaNone" | "quotaSnapshot" | "quotaResets" | "quotaExhausted" | "quotaWindow" | "quotaUsed" | "quotaFactsScope" | "composerLabel" | "pageDesc" | "signingIn" | "modelsSection" | "enhanced" | "defaultReasoningEffort" | "defaultReasoningEffortHint" | "defaultEffortAuto" | "contextWindowSection" | "contextWindowHint" | "contextWindowNoneEnabled" | "saved" | "saving" | "cacheSection" | "cacheDesc" | "cacheEmpty" | "cacheHitRatio" | "cacheCached" | "cacheFresh" | "cacheRequests" | "cacheMiss" | "cacheMissIdle" | "cacheDriftNone" | "cacheDriftContents" | "cacheDriftSystemInstruction" | "cacheDriftTools" | "cacheDriftSessionId" | "cacheDriftNewSession" | "quotaSection" | "quotaDesc" | "refreshingQuota" | "quotaEmpty" | "googleValidation" | "resetPrefix" | "resetUnavailable" | "resetNow" | "timeDayHour" | "timeHourMin" | "timeMin" | "updatedAt" | "loginFailed", string>;
282
291
  };
283
292
  export type AntigravityLocaleKey = keyof typeof zh;
284
293
  //# sourceMappingURL=locales.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"locales.d.ts","sourceRoot":"","sources":["../../../../src/client/antigravity/locales.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc,oBAAoB,CAAA;AAI/C,eAAO,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8Ed,CAAA;AAED,eAAO,MAAM,EAAE,EAAE,MAAM,CAAC,MAAM,OAAO,EAAE,EAAE,MAAM,CA6E9C,CAAA;AAED,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAKxB,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG,MAAM,OAAO,EAAE,CAAA"}
1
+ {"version":3,"file":"locales.d.ts","sourceRoot":"","sources":["../../../../src/client/antigravity/locales.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc,oBAAoB,CAAA;AAI/C,eAAO,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8Ed,CAAA;AAED,eAAO,MAAM,EAAE,EAAE,MAAM,CAAC,MAAM,OAAO,EAAE,EAAE,MAAM,CA6E9C,CAAA;AAED,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAKxB,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG,MAAM,OAAO,EAAE,CAAA"}
@@ -130,6 +130,9 @@ export declare const zh: {
130
130
  readonly deleteAccount: string;
131
131
  readonly cooling: string;
132
132
  readonly cooldownLeft: string;
133
+ readonly cooldownRemaining: string;
134
+ readonly cooldownRemainingSeconds: string;
135
+ readonly modelCooldown: string;
133
136
  readonly clearCooldown: string;
134
137
  readonly needsRelogin: string;
135
138
  readonly relogin: string;
@@ -277,6 +280,9 @@ export declare const dictionaries: {
277
280
  readonly deleteAccount: string;
278
281
  readonly cooling: string;
279
282
  readonly cooldownLeft: string;
283
+ readonly cooldownRemaining: string;
284
+ readonly cooldownRemainingSeconds: string;
285
+ readonly modelCooldown: string;
280
286
  readonly clearCooldown: string;
281
287
  readonly needsRelogin: string;
282
288
  readonly relogin: string;
@@ -422,6 +428,9 @@ export declare const dictionaries: {
422
428
  readonly deleteAccount: string;
423
429
  readonly cooling: string;
424
430
  readonly cooldownLeft: string;
431
+ readonly cooldownRemaining: string;
432
+ readonly cooldownRemainingSeconds: string;
433
+ readonly modelCooldown: string;
425
434
  readonly clearCooldown: string;
426
435
  readonly needsRelogin: string;
427
436
  readonly relogin: string;
@@ -443,8 +452,8 @@ export declare const dictionaries: {
443
452
  readonly quotaFactsScope: string;
444
453
  readonly composerLabel: string;
445
454
  };
446
- en: Record<"account" | "quotaRefreshing" | "rotationStrategy" | "accountId" | "relogin" | "source" | "tokens" | "title" | "signedOut" | "signedIn" | "plan" | "expires" | "signIn" | "signInAgain" | "loading" | "connection" | "testConnection" | "selectAll" | "unselectAll" | "modelsHint" | "contextWindowInvalid" | "contextWindowReset" | "contextWindowResetAll" | "contextWindowResetAllConfirm" | "save" | "refreshQuota" | "quotaSignedOut" | "stopImporting" | "accountPool" | "addAccount" | "accountCount" | "primaryAccount" | "activeAccount" | "setPrimary" | "deleteAccount" | "cooling" | "cooldownLeft" | "clearCooldown" | "needsRelogin" | "strategySequential" | "strategyRoundRobin" | "strategySticky" | "noAccounts" | "email" | "lastUsed" | "accountQuota" | "quotaNone" | "quotaSnapshot" | "quotaResets" | "quotaExhausted" | "quotaWindow" | "quotaUsed" | "quotaFactsScope" | "composerLabel" | "pageDesc" | "signingIn" | "modelsSection" | "enhanced" | "defaultReasoningEffort" | "defaultReasoningEffortHint" | "defaultEffortAuto" | "contextWindowSection" | "contextWindowHint" | "contextWindowNoneEnabled" | "saving" | "quotaSection" | "quotaDesc" | "refreshingQuota" | "quotaEmpty" | "updatedAt" | "loginFailed" | "now" | "planUnknown" | "subscriptionType" | "sourceManaged" | "sourceClaudeCode" | "adoptedBadge" | "signInSection" | "cancelSignIn" | "openAuthorizeUrl" | "authorizeUrl" | "redirectUri" | "loginModeManual" | "loginModeLoopback" | "loginFallbackReason" | "loginWaiting" | "loginExchanging" | "loginComplete" | "manualPasteSection" | "manualPasteHint" | "manualPastePlaceholder" | "manualPasteSubmit" | "manualPasteSubmitting" | "importClaudeCode" | "importing" | "testingConnection" | "testSuccess" | "testLatency" | "testFailed" | "testRetryable" | "testNotRetryable" | "routeOwned" | "routeConflict" | "refreshCatalog" | "refreshingCatalog" | "capImage" | "capNoImage" | "capThinkingOff" | "thinkingModeMidConvo" | "thinkingModeAdaptive" | "thinkingModeBudget" | "thinkingModeNone" | "cacheTtl" | "cacheTtlHint" | "cacheTtlSubscription" | "cacheTtl1h" | "cacheTtl5m" | "effortLow" | "effortMedium" | "effortHigh" | "effortXHigh" | "effortMax" | "modelLadders" | "modelLadderNone" | "quotaUnknown" | "quotaUnknownHint" | "usedLabel" | "remainingLabel" | "left" | "resetAt" | "resetUnknown" | "observedAt" | "quotaError" | "extraUsage" | "extraUsageEnabled" | "extraUsageDisabled" | "extraUsageLimit" | "sourceUsage" | "sourceHeaders" | "quotaStatus" | "quotaRepresentative" | "copy" | "copied", string>;
447
- 'en-US': Record<"account" | "quotaRefreshing" | "rotationStrategy" | "accountId" | "relogin" | "source" | "tokens" | "title" | "signedOut" | "signedIn" | "plan" | "expires" | "signIn" | "signInAgain" | "loading" | "connection" | "testConnection" | "selectAll" | "unselectAll" | "modelsHint" | "contextWindowInvalid" | "contextWindowReset" | "contextWindowResetAll" | "contextWindowResetAllConfirm" | "save" | "refreshQuota" | "quotaSignedOut" | "stopImporting" | "accountPool" | "addAccount" | "accountCount" | "primaryAccount" | "activeAccount" | "setPrimary" | "deleteAccount" | "cooling" | "cooldownLeft" | "clearCooldown" | "needsRelogin" | "strategySequential" | "strategyRoundRobin" | "strategySticky" | "noAccounts" | "email" | "lastUsed" | "accountQuota" | "quotaNone" | "quotaSnapshot" | "quotaResets" | "quotaExhausted" | "quotaWindow" | "quotaUsed" | "quotaFactsScope" | "composerLabel" | "pageDesc" | "signingIn" | "modelsSection" | "enhanced" | "defaultReasoningEffort" | "defaultReasoningEffortHint" | "defaultEffortAuto" | "contextWindowSection" | "contextWindowHint" | "contextWindowNoneEnabled" | "saving" | "quotaSection" | "quotaDesc" | "refreshingQuota" | "quotaEmpty" | "updatedAt" | "loginFailed" | "now" | "planUnknown" | "subscriptionType" | "sourceManaged" | "sourceClaudeCode" | "adoptedBadge" | "signInSection" | "cancelSignIn" | "openAuthorizeUrl" | "authorizeUrl" | "redirectUri" | "loginModeManual" | "loginModeLoopback" | "loginFallbackReason" | "loginWaiting" | "loginExchanging" | "loginComplete" | "manualPasteSection" | "manualPasteHint" | "manualPastePlaceholder" | "manualPasteSubmit" | "manualPasteSubmitting" | "importClaudeCode" | "importing" | "testingConnection" | "testSuccess" | "testLatency" | "testFailed" | "testRetryable" | "testNotRetryable" | "routeOwned" | "routeConflict" | "refreshCatalog" | "refreshingCatalog" | "capImage" | "capNoImage" | "capThinkingOff" | "thinkingModeMidConvo" | "thinkingModeAdaptive" | "thinkingModeBudget" | "thinkingModeNone" | "cacheTtl" | "cacheTtlHint" | "cacheTtlSubscription" | "cacheTtl1h" | "cacheTtl5m" | "effortLow" | "effortMedium" | "effortHigh" | "effortXHigh" | "effortMax" | "modelLadders" | "modelLadderNone" | "quotaUnknown" | "quotaUnknownHint" | "usedLabel" | "remainingLabel" | "left" | "resetAt" | "resetUnknown" | "observedAt" | "quotaError" | "extraUsage" | "extraUsageEnabled" | "extraUsageDisabled" | "extraUsageLimit" | "sourceUsage" | "sourceHeaders" | "quotaStatus" | "quotaRepresentative" | "copy" | "copied", string>;
455
+ en: Record<"account" | "quotaRefreshing" | "rotationStrategy" | "accountId" | "relogin" | "source" | "tokens" | "title" | "signedOut" | "signedIn" | "plan" | "expires" | "signIn" | "signInAgain" | "loading" | "connection" | "testConnection" | "selectAll" | "unselectAll" | "modelsHint" | "contextWindowInvalid" | "contextWindowReset" | "contextWindowResetAll" | "contextWindowResetAllConfirm" | "save" | "refreshQuota" | "quotaSignedOut" | "stopImporting" | "accountPool" | "addAccount" | "accountCount" | "primaryAccount" | "activeAccount" | "setPrimary" | "deleteAccount" | "cooling" | "cooldownLeft" | "cooldownRemaining" | "cooldownRemainingSeconds" | "modelCooldown" | "clearCooldown" | "needsRelogin" | "strategySequential" | "strategyRoundRobin" | "strategySticky" | "noAccounts" | "email" | "lastUsed" | "accountQuota" | "quotaNone" | "quotaSnapshot" | "quotaResets" | "quotaExhausted" | "quotaWindow" | "quotaUsed" | "quotaFactsScope" | "composerLabel" | "pageDesc" | "signingIn" | "modelsSection" | "enhanced" | "defaultReasoningEffort" | "defaultReasoningEffortHint" | "defaultEffortAuto" | "contextWindowSection" | "contextWindowHint" | "contextWindowNoneEnabled" | "saving" | "quotaSection" | "quotaDesc" | "refreshingQuota" | "quotaEmpty" | "updatedAt" | "loginFailed" | "now" | "planUnknown" | "subscriptionType" | "sourceManaged" | "sourceClaudeCode" | "adoptedBadge" | "signInSection" | "cancelSignIn" | "openAuthorizeUrl" | "authorizeUrl" | "redirectUri" | "loginModeManual" | "loginModeLoopback" | "loginFallbackReason" | "loginWaiting" | "loginExchanging" | "loginComplete" | "manualPasteSection" | "manualPasteHint" | "manualPastePlaceholder" | "manualPasteSubmit" | "manualPasteSubmitting" | "importClaudeCode" | "importing" | "testingConnection" | "testSuccess" | "testLatency" | "testFailed" | "testRetryable" | "testNotRetryable" | "routeOwned" | "routeConflict" | "refreshCatalog" | "refreshingCatalog" | "capImage" | "capNoImage" | "capThinkingOff" | "thinkingModeMidConvo" | "thinkingModeAdaptive" | "thinkingModeBudget" | "thinkingModeNone" | "cacheTtl" | "cacheTtlHint" | "cacheTtlSubscription" | "cacheTtl1h" | "cacheTtl5m" | "effortLow" | "effortMedium" | "effortHigh" | "effortXHigh" | "effortMax" | "modelLadders" | "modelLadderNone" | "quotaUnknown" | "quotaUnknownHint" | "usedLabel" | "remainingLabel" | "left" | "resetAt" | "resetUnknown" | "observedAt" | "quotaError" | "extraUsage" | "extraUsageEnabled" | "extraUsageDisabled" | "extraUsageLimit" | "sourceUsage" | "sourceHeaders" | "quotaStatus" | "quotaRepresentative" | "copy" | "copied", string>;
456
+ 'en-US': Record<"account" | "quotaRefreshing" | "rotationStrategy" | "accountId" | "relogin" | "source" | "tokens" | "title" | "signedOut" | "signedIn" | "plan" | "expires" | "signIn" | "signInAgain" | "loading" | "connection" | "testConnection" | "selectAll" | "unselectAll" | "modelsHint" | "contextWindowInvalid" | "contextWindowReset" | "contextWindowResetAll" | "contextWindowResetAllConfirm" | "save" | "refreshQuota" | "quotaSignedOut" | "stopImporting" | "accountPool" | "addAccount" | "accountCount" | "primaryAccount" | "activeAccount" | "setPrimary" | "deleteAccount" | "cooling" | "cooldownLeft" | "cooldownRemaining" | "cooldownRemainingSeconds" | "modelCooldown" | "clearCooldown" | "needsRelogin" | "strategySequential" | "strategyRoundRobin" | "strategySticky" | "noAccounts" | "email" | "lastUsed" | "accountQuota" | "quotaNone" | "quotaSnapshot" | "quotaResets" | "quotaExhausted" | "quotaWindow" | "quotaUsed" | "quotaFactsScope" | "composerLabel" | "pageDesc" | "signingIn" | "modelsSection" | "enhanced" | "defaultReasoningEffort" | "defaultReasoningEffortHint" | "defaultEffortAuto" | "contextWindowSection" | "contextWindowHint" | "contextWindowNoneEnabled" | "saving" | "quotaSection" | "quotaDesc" | "refreshingQuota" | "quotaEmpty" | "updatedAt" | "loginFailed" | "now" | "planUnknown" | "subscriptionType" | "sourceManaged" | "sourceClaudeCode" | "adoptedBadge" | "signInSection" | "cancelSignIn" | "openAuthorizeUrl" | "authorizeUrl" | "redirectUri" | "loginModeManual" | "loginModeLoopback" | "loginFallbackReason" | "loginWaiting" | "loginExchanging" | "loginComplete" | "manualPasteSection" | "manualPasteHint" | "manualPastePlaceholder" | "manualPasteSubmit" | "manualPasteSubmitting" | "importClaudeCode" | "importing" | "testingConnection" | "testSuccess" | "testLatency" | "testFailed" | "testRetryable" | "testNotRetryable" | "routeOwned" | "routeConflict" | "refreshCatalog" | "refreshingCatalog" | "capImage" | "capNoImage" | "capThinkingOff" | "thinkingModeMidConvo" | "thinkingModeAdaptive" | "thinkingModeBudget" | "thinkingModeNone" | "cacheTtl" | "cacheTtlHint" | "cacheTtlSubscription" | "cacheTtl1h" | "cacheTtl5m" | "effortLow" | "effortMedium" | "effortHigh" | "effortXHigh" | "effortMax" | "modelLadders" | "modelLadderNone" | "quotaUnknown" | "quotaUnknownHint" | "usedLabel" | "remainingLabel" | "left" | "resetAt" | "resetUnknown" | "observedAt" | "quotaError" | "extraUsage" | "extraUsageEnabled" | "extraUsageDisabled" | "extraUsageLimit" | "sourceUsage" | "sourceHeaders" | "quotaStatus" | "quotaRepresentative" | "copy" | "copied", string>;
448
457
  };
449
458
  export type ClaudeLocaleKey = keyof typeof zh;
450
459
  //# sourceMappingURL=locales.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"locales.d.ts","sourceRoot":"","sources":["../../../../src/client/claude/locales.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,eAAO,MAAM,SAAS,eAAe,CAAA;AAErC,eAAO,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2IL,CAAA;AAEV,eAAO,MAAM,EAAE,EAAE,MAAM,CAAC,MAAM,OAAO,EAAE,EAAE,MAAM,CAiIrC,CAAA;AAEV,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAKxB,CAAA;AAED,MAAM,MAAM,eAAe,GAAG,MAAM,OAAO,EAAE,CAAA"}
1
+ {"version":3,"file":"locales.d.ts","sourceRoot":"","sources":["../../../../src/client/claude/locales.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,eAAO,MAAM,SAAS,eAAe,CAAA;AAErC,eAAO,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2IL,CAAA;AAEV,eAAO,MAAM,EAAE,EAAE,MAAM,CAAC,MAAM,OAAO,EAAE,EAAE,MAAM,CAiIrC,CAAA;AAEV,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAKxB,CAAA;AAED,MAAM,MAAM,eAAe,GAAG,MAAM,OAAO,EAAE,CAAA"}
@@ -74,6 +74,9 @@ export declare const zh: {
74
74
  readonly deleteAccount: string;
75
75
  readonly cooling: string;
76
76
  readonly cooldownLeft: string;
77
+ readonly cooldownRemaining: string;
78
+ readonly cooldownRemainingSeconds: string;
79
+ readonly modelCooldown: string;
77
80
  readonly clearCooldown: string;
78
81
  readonly needsRelogin: string;
79
82
  readonly relogin: string;
@@ -173,6 +176,9 @@ export declare const dictionaries: {
173
176
  readonly deleteAccount: string;
174
177
  readonly cooling: string;
175
178
  readonly cooldownLeft: string;
179
+ readonly cooldownRemaining: string;
180
+ readonly cooldownRemainingSeconds: string;
181
+ readonly modelCooldown: string;
176
182
  readonly clearCooldown: string;
177
183
  readonly needsRelogin: string;
178
184
  readonly relogin: string;
@@ -270,6 +276,9 @@ export declare const dictionaries: {
270
276
  readonly deleteAccount: string;
271
277
  readonly cooling: string;
272
278
  readonly cooldownLeft: string;
279
+ readonly cooldownRemaining: string;
280
+ readonly cooldownRemainingSeconds: string;
281
+ readonly modelCooldown: string;
273
282
  readonly clearCooldown: string;
274
283
  readonly needsRelogin: string;
275
284
  readonly relogin: string;
@@ -292,8 +301,8 @@ export declare const dictionaries: {
292
301
  readonly quotaFactsScope: string;
293
302
  readonly composerLabel: string;
294
303
  };
295
- en: Record<"account" | "rotationStrategy" | "accountId" | "relogin" | "tokens" | "title" | "signedOut" | "signedIn" | "plan" | "expires" | "signIn" | "signInAgain" | "signOut" | "loading" | "connection" | "testConnection" | "selectAll" | "unselectAll" | "modelsHint" | "contextWindowReset" | "contextWindowResetAll" | "contextWindowResetAllConfirm" | "save" | "refreshQuota" | "accountPool" | "addAccount" | "accountCount" | "primaryAccount" | "activeAccount" | "setPrimary" | "deleteAccount" | "cooling" | "cooldownLeft" | "clearCooldown" | "needsRelogin" | "strategySequential" | "strategyRoundRobin" | "strategySticky" | "noAccounts" | "email" | "lastUsed" | "accountQuota" | "quotaNone" | "quotaSnapshot" | "quotaResets" | "quotaExhausted" | "quotaWindow" | "quotaUsed" | "quotaFactsScope" | "composerLabel" | "pageDesc" | "signingIn" | "modelsSection" | "enhanced" | "defaultReasoningEffort" | "defaultReasoningEffortHint" | "defaultEffortAuto" | "contextWindowSection" | "contextWindowHint" | "contextWindowNoneEnabled" | "saved" | "saving" | "quotaSection" | "quotaDesc" | "refreshingQuota" | "quotaEmpty" | "updatedAt" | "loginFailed" | "planUnknown" | "cancelSignIn" | "testingConnection" | "routeOwned" | "routeConflict" | "refreshCatalog" | "refreshingCatalog" | "keyName" | "organization" | "subscription" | "renews" | "authenticatedAt" | "openSignInPage" | "apiKeySection" | "apiKeyHint" | "apiKeyPlaceholder" | "apiKeySave" | "apiKeySaving" | "apiKeySaved" | "catalogStale" | "catalogFresh" | "zdrEnabled" | "wireAnthropic" | "wireOpenai" | "wireResponses" | "quotaCredits" | "quotaUnlimited", string>;
296
- 'en-US': Record<"account" | "rotationStrategy" | "accountId" | "relogin" | "tokens" | "title" | "signedOut" | "signedIn" | "plan" | "expires" | "signIn" | "signInAgain" | "signOut" | "loading" | "connection" | "testConnection" | "selectAll" | "unselectAll" | "modelsHint" | "contextWindowReset" | "contextWindowResetAll" | "contextWindowResetAllConfirm" | "save" | "refreshQuota" | "accountPool" | "addAccount" | "accountCount" | "primaryAccount" | "activeAccount" | "setPrimary" | "deleteAccount" | "cooling" | "cooldownLeft" | "clearCooldown" | "needsRelogin" | "strategySequential" | "strategyRoundRobin" | "strategySticky" | "noAccounts" | "email" | "lastUsed" | "accountQuota" | "quotaNone" | "quotaSnapshot" | "quotaResets" | "quotaExhausted" | "quotaWindow" | "quotaUsed" | "quotaFactsScope" | "composerLabel" | "pageDesc" | "signingIn" | "modelsSection" | "enhanced" | "defaultReasoningEffort" | "defaultReasoningEffortHint" | "defaultEffortAuto" | "contextWindowSection" | "contextWindowHint" | "contextWindowNoneEnabled" | "saved" | "saving" | "quotaSection" | "quotaDesc" | "refreshingQuota" | "quotaEmpty" | "updatedAt" | "loginFailed" | "planUnknown" | "cancelSignIn" | "testingConnection" | "routeOwned" | "routeConflict" | "refreshCatalog" | "refreshingCatalog" | "keyName" | "organization" | "subscription" | "renews" | "authenticatedAt" | "openSignInPage" | "apiKeySection" | "apiKeyHint" | "apiKeyPlaceholder" | "apiKeySave" | "apiKeySaving" | "apiKeySaved" | "catalogStale" | "catalogFresh" | "zdrEnabled" | "wireAnthropic" | "wireOpenai" | "wireResponses" | "quotaCredits" | "quotaUnlimited", string>;
304
+ en: Record<"account" | "rotationStrategy" | "accountId" | "relogin" | "tokens" | "title" | "signedOut" | "signedIn" | "plan" | "expires" | "signIn" | "signInAgain" | "signOut" | "loading" | "connection" | "testConnection" | "selectAll" | "unselectAll" | "modelsHint" | "contextWindowReset" | "contextWindowResetAll" | "contextWindowResetAllConfirm" | "save" | "refreshQuota" | "accountPool" | "addAccount" | "accountCount" | "primaryAccount" | "activeAccount" | "setPrimary" | "deleteAccount" | "cooling" | "cooldownLeft" | "cooldownRemaining" | "cooldownRemainingSeconds" | "modelCooldown" | "clearCooldown" | "needsRelogin" | "strategySequential" | "strategyRoundRobin" | "strategySticky" | "noAccounts" | "email" | "lastUsed" | "accountQuota" | "quotaNone" | "quotaSnapshot" | "quotaResets" | "quotaExhausted" | "quotaWindow" | "quotaUsed" | "quotaFactsScope" | "composerLabel" | "pageDesc" | "signingIn" | "modelsSection" | "enhanced" | "defaultReasoningEffort" | "defaultReasoningEffortHint" | "defaultEffortAuto" | "contextWindowSection" | "contextWindowHint" | "contextWindowNoneEnabled" | "saved" | "saving" | "quotaSection" | "quotaDesc" | "refreshingQuota" | "quotaEmpty" | "updatedAt" | "loginFailed" | "planUnknown" | "cancelSignIn" | "testingConnection" | "routeOwned" | "routeConflict" | "refreshCatalog" | "refreshingCatalog" | "keyName" | "organization" | "subscription" | "renews" | "authenticatedAt" | "openSignInPage" | "apiKeySection" | "apiKeyHint" | "apiKeyPlaceholder" | "apiKeySave" | "apiKeySaving" | "apiKeySaved" | "catalogStale" | "catalogFresh" | "zdrEnabled" | "wireAnthropic" | "wireOpenai" | "wireResponses" | "quotaCredits" | "quotaUnlimited", string>;
305
+ 'en-US': Record<"account" | "rotationStrategy" | "accountId" | "relogin" | "tokens" | "title" | "signedOut" | "signedIn" | "plan" | "expires" | "signIn" | "signInAgain" | "signOut" | "loading" | "connection" | "testConnection" | "selectAll" | "unselectAll" | "modelsHint" | "contextWindowReset" | "contextWindowResetAll" | "contextWindowResetAllConfirm" | "save" | "refreshQuota" | "accountPool" | "addAccount" | "accountCount" | "primaryAccount" | "activeAccount" | "setPrimary" | "deleteAccount" | "cooling" | "cooldownLeft" | "cooldownRemaining" | "cooldownRemainingSeconds" | "modelCooldown" | "clearCooldown" | "needsRelogin" | "strategySequential" | "strategyRoundRobin" | "strategySticky" | "noAccounts" | "email" | "lastUsed" | "accountQuota" | "quotaNone" | "quotaSnapshot" | "quotaResets" | "quotaExhausted" | "quotaWindow" | "quotaUsed" | "quotaFactsScope" | "composerLabel" | "pageDesc" | "signingIn" | "modelsSection" | "enhanced" | "defaultReasoningEffort" | "defaultReasoningEffortHint" | "defaultEffortAuto" | "contextWindowSection" | "contextWindowHint" | "contextWindowNoneEnabled" | "saved" | "saving" | "quotaSection" | "quotaDesc" | "refreshingQuota" | "quotaEmpty" | "updatedAt" | "loginFailed" | "planUnknown" | "cancelSignIn" | "testingConnection" | "routeOwned" | "routeConflict" | "refreshCatalog" | "refreshingCatalog" | "keyName" | "organization" | "subscription" | "renews" | "authenticatedAt" | "openSignInPage" | "apiKeySection" | "apiKeyHint" | "apiKeyPlaceholder" | "apiKeySave" | "apiKeySaving" | "apiKeySaved" | "catalogStale" | "catalogFresh" | "zdrEnabled" | "wireAnthropic" | "wireOpenai" | "wireResponses" | "quotaCredits" | "quotaUnlimited", string>;
297
306
  };
298
307
  export type CommandCodeLocaleKey = keyof typeof zh;
299
308
  //# sourceMappingURL=locales.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"locales.d.ts","sourceRoot":"","sources":["../../../../src/client/command-code/locales.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,eAAe,qBAAqB,CAAA;AAEjD,eAAO,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqEL,CAAA;AAEV,eAAO,MAAM,EAAE,EAAE,MAAM,CAAC,MAAM,OAAO,EAAE,EAAE,MAAM,CAmErC,CAAA;AAEV,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAKxB,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG,MAAM,OAAO,EAAE,CAAA"}
1
+ {"version":3,"file":"locales.d.ts","sourceRoot":"","sources":["../../../../src/client/command-code/locales.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,eAAe,qBAAqB,CAAA;AAEjD,eAAO,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqEL,CAAA;AAEV,eAAO,MAAM,EAAE,EAAE,MAAM,CAAC,MAAM,OAAO,EAAE,EAAE,MAAM,CAmErC,CAAA;AAEV,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAKxB,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG,MAAM,OAAO,EAAE,CAAA"}
@@ -47,8 +47,16 @@ export interface AccountPoolSectionProps<TAccount extends PoolAccountSummaryDto
47
47
  }
48
48
  /** Format one account timestamp the way every tab renders it. */
49
49
  export declare function formatAccountDate(ms?: number): string;
50
- /** Whole minutes left in a cooldown, never below one. */
51
- export declare function cooldownMinutesLeft(cooldownUntil: number, now?: number): number;
50
+ /** The labels the remaining-time text needs; every tab's set carries them. */
51
+ export type CooldownRemainingLabels = Pick<AccountPoolLabels, 'cooldownLeft' | 'cooldownRemaining' | 'cooldownRemainingSeconds'>;
52
+ /**
53
+ * The remaining cooldown, in the reader's own words.
54
+ *
55
+ * Whole minutes while a minute or more is left, minutes and seconds below
56
+ * that, and the seconds alone under a minute: "剩 1 分" for the last 59
57
+ * seconds is a lie, and "剩 0 分 42 秒" is unreadable.
58
+ */
59
+ export declare function formatCooldownRemaining(remainingMs: number, labels: CooldownRemainingLabels): string;
52
60
  /** Whether one account currently carries a live 429 cooldown. */
53
61
  export declare function isCoolingDown(account: PoolAccountSummaryDto, now?: number): boolean;
54
62
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"AccountPoolSection.d.ts","sourceRoot":"","sources":["../../../../src/client/common/AccountPoolSection.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAC7C,OAAO,KAAK,EACV,oBAAoB,EACpB,uBAAuB,EACvB,qBAAqB,EACtB,MAAM,wCAAwC,CAAA;AAC/C,OAAO,EAAmB,KAAK,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAGlF,YAAY,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAEjE,MAAM,WAAW,uBAAuB,CACtC,QAAQ,SAAS,qBAAqB,GAAG,qBAAqB,CAC9D,SAAQ,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,iBAAiB,GAAG,kBAAkB,CAAC,EAAE,UAAU,CAAC;IAC5F,QAAQ,EAAE,QAAQ,EAAE,CAAA;IACpB,mEAAmE;IACnE,MAAM,EAAE,iBAAiB,CAAA;IACzB,yEAAyE;IACzE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,uEAAuE;IACvE,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,OAAO,IAAI,IAAI,CAAA;IACf;;;;;OAKG;IACH,kBAAkB,CAAC,IAAI,SAAS,CAAA;IAChC,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACrC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxC,sEAAsE;IACtE,SAAS,CAAC,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACnC,aAAa,CAAC,QAAQ,EAAE,uBAAuB,GAAG,IAAI,CAAA;IACtD,sEAAsE;IACtE,aAAa,CAAC,CAAC,OAAO,EAAE,QAAQ,GAAG,SAAS,CAAA;IAC5C;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB;;;;;OAKG;IACH,oBAAoB,CAAC,CAAC,OAAO,EAAE,QAAQ,GAAG,SAAS,CAAA;IACnD,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,SAAS,CAAA;CACrB;AAED,iEAAiE;AACjE,wBAAgB,iBAAiB,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAOrD;AAED,yDAAyD;AACzD,wBAAgB,mBAAmB,CAAC,aAAa,EAAE,MAAM,EAAE,GAAG,SAAa,GAAG,MAAM,CAEnF;AAED,iEAAiE;AACjE,wBAAgB,aAAa,CAAC,OAAO,EAAE,qBAAqB,EAAE,GAAG,SAAa,GAAG,OAAO,CAEvF;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,SAAS,qBAAqB,GAAG,qBAAqB,EAC/F,KAAK,EAAE,uBAAuB,CAAC,QAAQ,CAAC,GACvC,KAAK,CAAC,YAAY,CAuJpB"}
1
+ {"version":3,"file":"AccountPoolSection.d.ts","sourceRoot":"","sources":["../../../../src/client/common/AccountPoolSection.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAuB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAClE,OAAO,KAAK,EACV,oBAAoB,EACpB,uBAAuB,EACvB,qBAAqB,EACtB,MAAM,wCAAwC,CAAA;AAC/C,OAAO,EAAmB,KAAK,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAIlF,YAAY,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAEjE,MAAM,WAAW,uBAAuB,CACtC,QAAQ,SAAS,qBAAqB,GAAG,qBAAqB,CAC9D,SAAQ,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,iBAAiB,GAAG,kBAAkB,CAAC,EAAE,UAAU,CAAC;IAC5F,QAAQ,EAAE,QAAQ,EAAE,CAAA;IACpB,mEAAmE;IACnE,MAAM,EAAE,iBAAiB,CAAA;IACzB,yEAAyE;IACzE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,uEAAuE;IACvE,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,OAAO,IAAI,IAAI,CAAA;IACf;;;;;OAKG;IACH,kBAAkB,CAAC,IAAI,SAAS,CAAA;IAChC,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACrC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxC,sEAAsE;IACtE,SAAS,CAAC,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACnC,aAAa,CAAC,QAAQ,EAAE,uBAAuB,GAAG,IAAI,CAAA;IACtD,sEAAsE;IACtE,aAAa,CAAC,CAAC,OAAO,EAAE,QAAQ,GAAG,SAAS,CAAA;IAC5C;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB;;;;;OAKG;IACH,oBAAoB,CAAC,CAAC,OAAO,EAAE,QAAQ,GAAG,SAAS,CAAA;IACnD,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,SAAS,CAAA;CACrB;AAED,iEAAiE;AACjE,wBAAgB,iBAAiB,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAOrD;AAED,8EAA8E;AAC9E,MAAM,MAAM,uBAAuB,GAAG,IAAI,CACxC,iBAAiB,EACjB,cAAc,GAAG,mBAAmB,GAAG,0BAA0B,CAClE,CAAA;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,uBAAuB,GAAG,MAAM,CAKpG;AAED,iEAAiE;AACjE,wBAAgB,aAAa,CAAC,OAAO,EAAE,qBAAqB,EAAE,GAAG,SAAa,GAAG,OAAO,CAEvF;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,SAAS,qBAAqB,GAAG,qBAAqB,EAC/F,KAAK,EAAE,uBAAuB,CAAC,QAAQ,CAAC,GACvC,KAAK,CAAC,YAAY,CAyMpB"}
@@ -19,6 +19,23 @@ export interface AccountPoolLabels {
19
19
  cooling: string;
20
20
  /** `{minutes}` is replaced with the remaining cooldown in whole minutes. */
21
21
  cooldownLeft: string;
22
+ /**
23
+ * `{minutes}` and `{seconds}` are the remaining cooldown, to the second.
24
+ *
25
+ * A badge that counts whole minutes only reads "剩 5 分" for the whole minute,
26
+ * which tells a user who is waiting for it to lift exactly nothing; this one
27
+ * counts the seconds as they pass.
28
+ */
29
+ cooldownRemaining: string;
30
+ /**
31
+ * `{seconds}` is the remaining cooldown once less than a minute is left.
32
+ *
33
+ * A template of its own because "剩 1 分" for the last 59 seconds is a lie:
34
+ * under a minute the seconds are the only honest thing to show.
35
+ */
36
+ cooldownRemainingSeconds: string;
37
+ /** Names the row of one model parked on an account. */
38
+ modelCooldown: string;
22
39
  clearCooldown: string;
23
40
  needsRelogin: string;
24
41
  relogin: string;
@@ -1 +1 @@
1
- {"version":3,"file":"account-pool-labels.d.ts","sourceRoot":"","sources":["../../../../src/client/common/account-pool-labels.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,uEAAuE;AACvE,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB,mEAAmE;IACnE,YAAY,EAAE,MAAM,CAAA;IACpB,cAAc,EAAE,MAAM,CAAA;IACtB,aAAa,EAAE,MAAM,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IACrB,OAAO,EAAE,MAAM,CAAA;IACf,4EAA4E;IAC5E,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,MAAM,CAAA;IACrB,YAAY,EAAE,MAAM,CAAA;IACpB,OAAO,EAAE,MAAM,CAAA;IACf,gBAAgB,EAAE,MAAM,CAAA;IACxB,kBAAkB,EAAE,MAAM,CAAA;IAC1B,kBAAkB,EAAE,MAAM,CAAA;IAC1B,cAAc,EAAE,MAAM,CAAA;IACtB,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,6CAA6C;IAC7C,YAAY,EAAE,MAAM,CAAA;IACpB,0DAA0D;IAC1D,SAAS,EAAE,MAAM,CAAA;IACjB,0DAA0D;IAC1D,aAAa,EAAE,MAAM,CAAA;IACrB,0DAA0D;IAC1D,WAAW,EAAE,MAAM,CAAA;IACnB,6DAA6D;IAC7D,cAAc,EAAE,MAAM,CAAA;IACtB,4EAA4E;IAC5E,WAAW,EAAE,MAAM,CAAA;IACnB,+DAA+D;IAC/D,SAAS,EAAE,MAAM,CAAA;IACjB,6EAA6E;IAC7E,eAAe,EAAE,MAAM,CAAA;IACvB,8DAA8D;IAC9D,aAAa,EAAE,MAAM,CAAA;CACtB;AAED,qEAAqE;AACrE,eAAO,MAAM,aAAa,EAAE,iBA+B3B,CAAA;AAED,sEAAsE;AACtE,eAAO,MAAM,aAAa,EAAE,iBA+B3B,CAAA;AAED,kDAAkD;AAClD,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG,MAAM,CAIjG"}
1
+ {"version":3,"file":"account-pool-labels.d.ts","sourceRoot":"","sources":["../../../../src/client/common/account-pool-labels.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,uEAAuE;AACvE,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB,mEAAmE;IACnE,YAAY,EAAE,MAAM,CAAA;IACpB,cAAc,EAAE,MAAM,CAAA;IACtB,aAAa,EAAE,MAAM,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IACrB,OAAO,EAAE,MAAM,CAAA;IACf,4EAA4E;IAC5E,YAAY,EAAE,MAAM,CAAA;IACpB;;;;;;OAMG;IACH,iBAAiB,EAAE,MAAM,CAAA;IACzB;;;;;OAKG;IACH,wBAAwB,EAAE,MAAM,CAAA;IAChC,uDAAuD;IACvD,aAAa,EAAE,MAAM,CAAA;IACrB,aAAa,EAAE,MAAM,CAAA;IACrB,YAAY,EAAE,MAAM,CAAA;IACpB,OAAO,EAAE,MAAM,CAAA;IACf,gBAAgB,EAAE,MAAM,CAAA;IACxB,kBAAkB,EAAE,MAAM,CAAA;IAC1B,kBAAkB,EAAE,MAAM,CAAA;IAC1B,cAAc,EAAE,MAAM,CAAA;IACtB,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,6CAA6C;IAC7C,YAAY,EAAE,MAAM,CAAA;IACpB,0DAA0D;IAC1D,SAAS,EAAE,MAAM,CAAA;IACjB,0DAA0D;IAC1D,aAAa,EAAE,MAAM,CAAA;IACrB,0DAA0D;IAC1D,WAAW,EAAE,MAAM,CAAA;IACnB,6DAA6D;IAC7D,cAAc,EAAE,MAAM,CAAA;IACtB,4EAA4E;IAC5E,WAAW,EAAE,MAAM,CAAA;IACnB,+DAA+D;IAC/D,SAAS,EAAE,MAAM,CAAA;IACjB,6EAA6E;IAC7E,eAAe,EAAE,MAAM,CAAA;IACvB,8DAA8D;IAC9D,aAAa,EAAE,MAAM,CAAA;CACtB;AAED,qEAAqE;AACrE,eAAO,MAAM,aAAa,EAAE,iBAkC3B,CAAA;AAED,sEAAsE;AACtE,eAAO,MAAM,aAAa,EAAE,iBAkC3B,CAAA;AAED,kDAAkD;AAClD,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG,MAAM,CAIjG"}
@@ -21,6 +21,20 @@ export declare function parsePositiveCapacity(value: string): number | null;
21
21
  export declare function formatCapacity(value: number): string;
22
22
  /** A stamp in the reader's own locale, or an em dash when there is none. */
23
23
  export declare function formatDate(ms?: number | null): string;
24
+ /**
25
+ * The remaining part of a cooldown, split into whole minutes and seconds.
26
+ *
27
+ * A cooldown counted in whole minutes only is frozen for a whole minute at a
28
+ * time: the badge says "剩 5 分" while the wait drops from 5:00 to 4:01, and
29
+ * the user is left watching a number that does not move. The seconds are what
30
+ * make the wait legible, so they are carried separately - and rounded UP,
31
+ * because a cooldown with 30.2 seconds left is still 31 seconds of waiting, and
32
+ * rounding down would announce "0 seconds left" while the wait is not over.
33
+ */
34
+ export declare function cooldownRemainingParts(remainingMs: number): {
35
+ minutes: number;
36
+ seconds: number;
37
+ };
24
38
  /**
25
39
  * Countdown to a reset instant ("3d 4h"), empty when there is nothing to count
26
40
  * down to. Empty rather than "—" because callers append it to a date they have
@@ -1 +1 @@
1
- {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../../../src/client/common/format.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOlE;AAED,uEAAuE;AACvE,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIpD;AAED,4EAA4E;AAC5E,wBAAgB,UAAU,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAOrD;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAU5D"}
1
+ {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../../../src/client/common/format.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOlE;AAED,uEAAuE;AACvE,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIpD;AAED,4EAA4E;AAC5E,wBAAgB,UAAU,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAOrD;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAGhG;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAU5D"}
@@ -1 +1 @@
1
- {"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../../../src/client/common/styles.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,aAAa,4BAA4B,CAAA;AAEtD;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAuBxC"}
1
+ {"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../../../src/client/common/styles.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,aAAa,4BAA4B,CAAA;AAEtD;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CA+BxC"}