Files
wehub-resource-sync 4b6817381b
CI (OpenClaw E2E) / openclaw test (push) Has been cancelled
CI / coverage-report (push) Has been cancelled
CI / test-kubernetes (push) Has been cancelled
CI / should-run-thorough (push) Has been cancelled
CI / test-thorough (cloudwatch-demo) (push) Has been cancelled
CI / test-thorough (flink-ecs) (push) Has been cancelled
CI / test-thorough (upstream-lambda) (push) Has been cancelled
CI / test-thorough (prefect-ecs-fargate) (push) Has been cancelled
Release / build-binaries (zip, opensre.exe, onefile, windows-latest, windows-x64) (push) Has been cancelled
Benchmark image — build + push to ECR (any adapter) / build + push (push) Has been cancelled
CI / quality (ubuntu-latest) (push) Has been cancelled
CI / test (tools-runtime) (push) Has been cancelled
CI / test (e2e-general) (push) Has been cancelled
CI / test (cli-runtime) (push) Has been cancelled
CI / test (e2e-provider-and-openclaw) (push) Has been cancelled
CI / test (integrations-and-misc) (push) Has been cancelled
Release / verify (push) Has been cancelled
Release / build-python-dist (push) Has been cancelled
Release / build-binaries (tar.gz, opensre, onedir, macos-15-intel, darwin-x64) (push) Has been cancelled
Release / build-binaries (tar.gz, opensre, onedir, macos-latest, darwin-arm64) (push) Has been cancelled
Release / build-binaries (tar.gz, opensre, onedir, ubuntu-22.04, linux-x64) (push) Has been cancelled
Release / publish-release (push) Has been cancelled
Release / publish-main-release (push) Has been cancelled
Interactive Shell Live (PR + post-merge) / turn-checks (no-LLM) (push) Has been cancelled
CodeQL / Analyze (python) (push) Has been cancelled
Interactive Shell Live (PR + post-merge) / turn-live shard ${{ matrix.shard_index }} (push) Has been cancelled
Release / prepare (push) Has been cancelled
Release / build-binaries (tar.gz, opensre, onedir, ubuntu-22.04-arm, linux-arm64) (push) Has been cancelled
Synthetic Deterministic Tests / Synthetic offline (deterministic) (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:10:45 +08:00

59 lines
1.7 KiB
Python

"""Canonical provider IDs and discovery-name to provider-ID mapping.
The provider-ID set is the shared contract every layer of the agents
stack agrees on: discovery classifies commands into these names,
the token source and meter registries key off the same names, and
``provider_for`` resolves an ``AgentRecord`` to one of them. Keeping
the constants and the small name-resolution helper here lets all of
those consumers depend on a single thin module instead of pulling in
the heavier discovery (``ps``, process dedupe, Cursor terminal
metadata) just to read a frozenset.
"""
from __future__ import annotations
KNOWN_PROVIDERS: frozenset[str] = frozenset(
{
"claude-code",
"codex",
"cursor",
"aider",
"gemini-cli",
"antigravity-cli",
"opencode",
"kimi",
"copilot",
}
)
# ``cursor-claude-code`` is the Anthropic extension wrapping the real
# ``claude`` binary with ``--output-format stream-json``; same NDJSON,
# same meter. The other cursor flavors emit plain text.
_CURSOR_FAMILY_TO_PROVIDER: dict[str, str] = {
"cursor-claude-code": "claude-code",
"cursor-agent-exec": "cursor",
"cursor-agent": "cursor",
}
def provider_from_classified_name(name: str) -> str | None:
"""Derive a canonical provider id from a discovery-style name."""
base = _strip_pid_suffix(name)
if base in _CURSOR_FAMILY_TO_PROVIDER:
return _CURSOR_FAMILY_TO_PROVIDER[base]
if base in KNOWN_PROVIDERS:
return base
return None
def _strip_pid_suffix(name: str) -> str:
if "-" not in name:
return name
base, _, tail = name.rpartition("-")
if tail.isdigit():
return base
return name
__all__ = ["KNOWN_PROVIDERS", "provider_from_classified_name"]