Yash030/claude-code-proxy
2
1[build-system]2requires = ["hatchling"]3build-backend = "hatchling.build"4 5[project]6name = "free-claude-code"7version = "2.0.0"8description = "Middleware between Claude Code CLI (Anthropic API) and NVIDIA NIM"9requires-python = ">=3.12"10dependencies = [11 "fastapi[standard]>=0.136.1",12 "uvicorn>=0.46.0",13 "httpx[http2,socks]>=0.28.1",14 "markdown-it-py>=3.0.0",15 "pydantic>=2.13.3",16 "python-dotenv>=1.2.2",17 "tiktoken>=0.7.0",18 "python-telegram-bot>=22.7",19 "discord.py>=2.7.1",20 "pydantic-settings>=2.14.0",21 "openai>=2.32.0",22 "loguru>=0.7.0",23 "aiohttp>=3.13.4",24 "sqlalchemy>=2.0.49",25 "asyncpg>=0.31.0",26 "redis>=7.4.0",27 "jinja2>=3.1.0",28]29 30[project.scripts]31free-claude-code = "cli.entrypoints:serve"32fcc-init = "cli.entrypoints:init"33 34[project.optional-dependencies]35voice = [36 "grpcio>=1.80.0",37 "grpcio-tools>=1.80.0",38 "nvidia-riva-client>=2.25.1",39]40voice_local = [41 "torch>=2.11.0",42 "transformers>=5.6.2",43 "accelerate>=1.13.0",44 "librosa>=0.10.0",45]46 47[tool.hatch.build.targets.wheel]48packages = ["api", "cli", "config", "core", "messaging", "providers"]49 50[tool.hatch.build.targets.wheel.force-include]51".env.example" = "cli/env.example"52 53[tool.uv.sources]54torch = { index = "pytorch-cu130" }55 56[[tool.uv.index]]57name = "pytorch-cu130"58url = "https://download.pytorch.org/whl/cu130"59explicit = true60 61[dependency-groups]62dev = [63 "pytest>=9.0.3",64 "pytest-asyncio>=1.3.0",65 "pytest-cov>=7.1.0",66 "ty>=0.0.32",67 "ruff>=0.15.12",68 "pytest-xdist>=3.8.0",69]70 71[tool.ruff]72target-version = "py314"73line-length = 8874 75[tool.ruff.lint]76select = [77 "E", # pycodestyle errors78 "W", # pycodestyle warnings79 "F", # Pyflakes (undefined names, unused imports)80 "I", # isort (import ordering)81 "UP", # pyupgrade (modernise syntax for target Python version)82 "B", # flake8-bugbear (common bugs and anti-patterns)83 "C4", # flake8-comprehensions (idiomatic comprehensions)84 "SIM", # flake8-simplify (simplifiable code patterns)85 "PERF", # Perflint (performance anti-patterns)86 "RUF", # Ruff-specific rules87]88ignore = [89 "E501", # line too long — enforced by the formatter instead90 "B008", # FastAPI Depends() in argument defaults is intentional91 "RUF006", # fire-and-forget tasks intentionally not awaited92]93 94[tool.ruff.lint.isort]95known-first-party = ["api", "cli", "config", "core", "messaging", "providers", "smoke"]96 97[tool.ruff.format]98quote-style = "double"99indent-style = "space"100line-ending = "auto"101skip-magic-trailing-comma = false102 103[tool.pytest.ini_options]104pythonpath = ["."]105addopts = "-n auto"106testpaths = ["tests"]107markers = [108 "live: opt-in local smoke tests that can touch real services",109 "interactive: smoke tests requiring manual user interaction",110 "provider: live provider checks",111 "messaging: live messaging platform checks",112 "cli: CLI integration checks",113 "clients: client compatibility checks",114 "voice: voice transcription checks",115 "contract: deterministic feature contract checks",116 "smoke_target(name): route a smoke test behind FCC_SMOKE_TARGETS",117]118 119[tool.ty.environment]120python-version = "3.14"121 122[tool.ty.analysis]123# Optional voice_local extra: torch, transformers, librosa for local whisper transcription124# Optional voice extra: nvidia-riva-client for nvidia_nim transcription provider125allowed-unresolved-imports = ["torch", "transformers", "librosa", "riva.client"]126 