Files
wehub-resource-sync 5296d0e97c
CI / Ban suppressions and legacy annotations (push) Has been cancelled
CI / pytest (push) Has been cancelled
CI / ruff-check (push) Has been cancelled
CI / ruff-format (push) Has been cancelled
CI / ty (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:35:44 +08:00

65 lines
2.0 KiB
Python

"""Installed `fcc-claude` launcher."""
import os
import sys
from collections.abc import Sequence
from free_claude_code.cli.claude_env import (
CLAUDE_BINARY_NAME,
build_claude_proxy_env,
)
from free_claude_code.config.server_urls import local_proxy_root_url
from free_claude_code.config.settings import get_settings
from .common import preflight_proxy, resolve_client_binary, run_client_process
_DISPLAY_NAME = "Claude Code"
_INSTALL_HINT = "Install Claude Code with: npm install -g @anthropic-ai/claude-code"
def launch(argv: Sequence[str] | None = None) -> None:
"""Launch Claude Code with Free Claude Code proxy environment variables."""
settings = get_settings()
proxy_root_url = local_proxy_root_url(settings)
if error := preflight_proxy(proxy_root_url):
print(
f"Free Claude Code proxy is not reachable at {proxy_root_url}: {error}",
file=sys.stderr,
)
print("Start it in another terminal with: fcc-server", file=sys.stderr)
raise SystemExit(1)
binary_name = claude_binary_name()
binary_path = resolve_client_binary(
binary_name=binary_name,
display_name=_DISPLAY_NAME,
install_hint=_INSTALL_HINT,
)
args = list(sys.argv[1:] if argv is None else argv)
run_client_process(
command=build_claude_launcher_command(binary_path=binary_path, argv=args),
env=build_claude_proxy_env(
proxy_root_url=proxy_root_url,
auth_token=settings.anthropic_auth_token,
base_env=os.environ,
),
binary_name=binary_name,
display_name=_DISPLAY_NAME,
install_hint=_INSTALL_HINT,
)
def claude_binary_name() -> str:
"""Return the Claude Code binary name."""
return CLAUDE_BINARY_NAME
def build_claude_launcher_command(
*, binary_path: str, argv: Sequence[str]
) -> list[str]:
"""Return the Claude wrapper command without changing user arguments."""
return [binary_path, *argv]