chore: bootstrap project scaffolding

Add architecture doc (research-wiki/ARCHITECTURE.md), CLAUDE.md with
tiered SOP for Fable 5, adapted .claude skills/hooks/settings, package
skeleton (src/polygateway), pyproject with import-linter contracts,
Makefile, .env.example and smoke test.
This commit is contained in:
2026-07-20 00:49:10 -04:00
commit 3058f4c744
63 changed files with 7631 additions and 0 deletions
+69
View File
@@ -0,0 +1,69 @@
[build-system]
requires = ["setuptools>=68.0"]
build-backend = "setuptools.build_meta"
[project]
name = "polygateway"
version = "0.1.0"
description = "PolyGateway:实验室统一的大语言模型(LLM/VLM/OCR)调度与中转库——多源、限流、重试、熔断、缓存、遥测"
requires-python = ">=3.11"
dependencies = [
"httpx>=0.27",
"pydantic>=2.8",
"pydantic-settings>=2.4",
"loguru>=0.7",
]
[project.optional-dependencies]
redis = ["redis>=5.0"]
postgres = ["asyncpg>=0.29"]
structured = ["json-repair>=0.28"]
sdk = ["openai>=1.30"]
dev = [
"pytest>=8.0",
"pytest-cov>=5.0",
"pytest-asyncio>=0.23",
"ruff>=0.6",
"radon>=6.0",
"import-linter>=2.0",
]
[tool.setuptools.packages.find]
where = ["src"]
[tool.pytest.ini_options]
pythonpath = ["src"]
testpaths = ["tests"]
asyncio_mode = "auto"
markers = [
"requires_redis: 需要可达的 Redis(无则 skip",
"requires_llm: 需要真实 LLM 网关(无则 skip,输出落 tests/outputs/",
"slow: 慢速测试(CI 按需跑)",
]
[tool.ruff]
target-version = "py311"
line-length = 100
[tool.ruff.lint]
select = ["E", "F", "W", "I", "N", "UP", "B", "A", "C4", "SIM", "TCH"]
ignore = ["E501"]
[tool.ruff.lint.isort]
known-first-party = ["polygateway"]
# 依赖纪律(ARCHITECTURE.md §8):ports/types/errors/streaming 为最内层;
# middleware 只依赖端口;transports/backends/telemetry/structured/providers/sources
# 只实现端口且互不依赖;client 是唯一组装层。
# 注:M1 模块落地前 lint-imports 由 Makefile 门控跳过。
[tool.importlinter]
root_packages = ["polygateway"]
[[tool.importlinter.contracts]]
name = "洋葱分层:client → 实现层 → 内核(ports/types/errors/streaming"
type = "layers"
layers = [
"polygateway.client",
"polygateway.middleware : polygateway.transports : polygateway.backends : polygateway.telemetry : polygateway.structured : polygateway.providers : polygateway.sources",
"polygateway.ports : polygateway.types : polygateway.errors : polygateway.streaming",
]