OpenAICodexProvider replaces the openai stub. It reads the rate-limit snapshot
the Codex CLI already records locally (no second auth): each turn Codex writes a
token_count event into $CODEX_HOME/sessions/**/rollout-*.jsonl whose
payload.rate_limits mirrors Claude's model — primary (5h) + secondary (weekly),
each with used_percent + resets_at + plan_type. The provider surfaces the
freshest such snapshot; a window whose reset time has passed is reported as a
fresh 0% (local read, so current in-session and self-heals between sessions).
primary -> s/sr, secondary -> w/wr, plan_type -> status ("Plus"/…),
rate_limit_reached_type -> "limited". No per-token cost (subscription), so the
two rate-limit bars are the metric, per the locked v3 decision.
Verified against the real ~/.codex: full daemon payload with openai active =
{pv:openai, pnm:"OpenAI Codex", ac:0x10a37f, st:"Plus", ok:true, weekly reset}.
registry test updated (openai now real, zai still stub); +7 provider tests.
113 passed, 2 Linux-only failures (baseline). spec: hiddenimport added.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
34 lines
1016 B
Python
34 lines
1016 B
Python
"""Provider registry (v3).
|
|
|
|
get_provider(id) returns a Provider instance for the daemon to poll. Anthropic
|
|
is real; OpenAI and z.ai return a StubProvider until M2/M3 land, so selecting
|
|
them never crashes the loop.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from .base import Provider, ProviderStatus, StubProvider
|
|
from .anthropic import AnthropicProvider
|
|
from .openai_codex import OpenAICodexProvider
|
|
|
|
# Brand accents / labels for the not-yet-implemented providers, so the stub still
|
|
# carries the right theme hint to the watch once firmware theming lands.
|
|
_STUB_META = {
|
|
"zai": ("z.ai GLM", "3859ff"),
|
|
}
|
|
|
|
|
|
def get_provider(pid: str) -> Provider:
|
|
if pid == "anthropic":
|
|
return AnthropicProvider()
|
|
if pid == "openai":
|
|
return OpenAICodexProvider()
|
|
label, accent = _STUB_META.get(pid, (pid, "d97757"))
|
|
return StubProvider(pid, label=label, accent=accent)
|
|
|
|
|
|
__all__ = [
|
|
"Provider", "ProviderStatus", "StubProvider",
|
|
"AnthropicProvider", "OpenAICodexProvider", "get_provider",
|
|
]
|