f3d80b4628
Auto Release / auto-release (push) Failing after 1s
CI / lint (push) Failing after 0s
CI / screenshot-quality (push) Failing after 3s
CI / pr-policy (push) Has been skipped
CI / test (3.11) (push) Failing after 0s
CI / test (3.12) (push) Failing after 0s
CI / test (3.13) (push) Failing after 3s
CI / coverage (push) Failing after 1s
Legibility / legibility (push) Failing after 3s
111 lines
2.8 KiB
TOML
111 lines
2.8 KiB
TOML
[project]
|
|
name = "claude-tap"
|
|
dynamic = ["version"]
|
|
description = "Trace AI CLI API requests via local reverse and forward proxies. Inspect system prompts, messages, tools, and token usage."
|
|
requires-python = ">=3.11"
|
|
license = "MIT"
|
|
authors = [{ name = "liaohch3" }]
|
|
readme = "README.md"
|
|
keywords = ["claude", "claude-code", "codex", "kimi", "cursor", "qoder", "trace", "proxy", "api", "llm", "context-engineering"]
|
|
classifiers = [
|
|
"Development Status :: 4 - Beta",
|
|
"Environment :: Console",
|
|
"Intended Audience :: Developers",
|
|
"Programming Language :: Python :: 3",
|
|
"Programming Language :: Python :: 3.11",
|
|
"Programming Language :: Python :: 3.12",
|
|
"Programming Language :: Python :: 3.13",
|
|
"Topic :: Software Development :: Debuggers",
|
|
"Topic :: Software Development :: Testing",
|
|
]
|
|
dependencies = [
|
|
"aiohttp==3.14.1",
|
|
"backports-zstd>=1.0; python_version < '3.14'",
|
|
"cryptography>=42.0",
|
|
]
|
|
|
|
[project.urls]
|
|
Homepage = "https://github.com/liaohch3/claude-tap"
|
|
Repository = "https://github.com/liaohch3/claude-tap"
|
|
Issues = "https://github.com/liaohch3/claude-tap/issues"
|
|
|
|
[project.scripts]
|
|
claude-tap = "claude_tap.cli:main_entry"
|
|
|
|
[build-system]
|
|
requires = ["setuptools>=68.0", "setuptools-scm[toml]>=8.0"]
|
|
build-backend = "setuptools.build_meta"
|
|
|
|
[tool.setuptools]
|
|
packages = ["claude_tap", "claude_tap.viewer_assets"]
|
|
|
|
[tool.setuptools_scm]
|
|
version_scheme = "guess-next-dev"
|
|
local_scheme = "no-local-version"
|
|
|
|
[tool.setuptools.package-data]
|
|
claude_tap = ["dashboard.html", "viewer.html", "viewer_i18n.json", "py.typed"]
|
|
"claude_tap.viewer_assets" = ["*.css", "*.js"]
|
|
|
|
[project.optional-dependencies]
|
|
dev = [
|
|
"pytest>=8.0",
|
|
"pytest-asyncio>=0.23",
|
|
"pytest-timeout>=2.3",
|
|
"pexpect>=4.9",
|
|
"coverage>=7.6",
|
|
"ruff>=0.11",
|
|
]
|
|
|
|
[tool.ruff]
|
|
target-version = "py311"
|
|
line-length = 120
|
|
|
|
[tool.ruff.lint]
|
|
select = ["E", "F", "W", "I"]
|
|
ignore = ["E501"]
|
|
|
|
[tool.pytest.ini_options]
|
|
asyncio_mode = "auto"
|
|
testpaths = ["tests"]
|
|
python_files = ["test_*.py"]
|
|
python_functions = ["test_*"]
|
|
addopts = [
|
|
"-v",
|
|
"--tb=short",
|
|
"--strict-markers",
|
|
]
|
|
markers = [
|
|
"slow: marks tests as slow (deselect with '-m \"not slow\"')",
|
|
"integration: marks tests as integration tests",
|
|
"asyncio: marks tests as async (run by pytest-asyncio)",
|
|
"real_e2e: marks tests as real E2E tests requiring claude CLI (use --run-real-e2e)",
|
|
]
|
|
timeout = 60
|
|
|
|
[tool.coverage.run]
|
|
source = ["claude_tap"]
|
|
branch = true
|
|
omit = ["tests/*"]
|
|
|
|
[tool.coverage.report]
|
|
exclude_lines = [
|
|
"pragma: no cover",
|
|
"if __name__ == .__main__.:",
|
|
"if TYPE_CHECKING:",
|
|
]
|
|
show_missing = true
|
|
|
|
[tool.claude_tap.coverage]
|
|
python_total_min = 65.0
|
|
python_diff_min = 80.0
|
|
viewer_js_function_min = 50.0
|
|
viewer_js_diff_min = 80.0
|
|
viewer_css_selector_min = 65.0
|
|
viewer_css_diff_min = 80.0
|
|
|
|
[dependency-groups]
|
|
dev = [
|
|
"playwright>=1.58.0",
|
|
]
|