forked from promptdriven/pdd
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpyproject.toml
More file actions
197 lines (185 loc) · 6.25 KB
/
Copy pathpyproject.toml
File metadata and controls
197 lines (185 loc) · 6.25 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
[build-system]
requires = [
"setuptools>=64",
"setuptools-scm>=8",
"wheel"
]
build-backend = "setuptools.build_meta"
[project]
name = "pdd-cli"
dynamic = ["version"]
description = "PDD (Prompt-Driven Development) Command Line Interface"
readme = {file = "pypi_description.rst", content-type = "text/x-rst"}
authors = [
{ name = "Greg Tanaka"}, {email = "glt@alumni.caltech.edu" }
]
license = { text = "MIT" }
classifiers = [
"Development Status :: 3 - Alpha",
"Intended Audience :: Developers",
"License :: OSI Approved :: MIT License",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Topic :: Software Development :: Code Generators",
"Topic :: Scientific/Engineering :: Artificial Intelligence"
]
keywords = [
"prompt-driven development",
"code generation",
"AI",
"LLM",
"unit testing",
"software development"
]
dependencies = [
"GitPython==3.1.50",
"Requests==2.34.2",
"aiofiles==25.1.0",
"click==8.4.1",
"cryptography>=46,<50",
"firecrawl-py==4.28.0",
"firebase_admin==7.4.0",
"httpx==0.28.1",
"keyring==25.7.0",
"keyrings.alt==5.0.2",
"langchain>=0.3.25,<0.4",
"langchain-anthropic>=0.3.14,<0.4",
"langchain-community>=0.3.25,<0.4",
"langchain-core>=0.3.56,<0.4",
"langchain-mcp-adapters>=0.1.0,<0.2",
"langgraph>=0.3.0,<0.4",
"nest_asyncio==1.6.0",
"numpy>=1.26.0",
"pandas==3.0.3",
"psutil>=7.0.0",
"pydantic==2.13.4",
"litellm[caching]>=1.84.0,<1.85",
"lxml>=5.0.0",
"rich==15.0.0",
"regex>=2024.0.0",
"semver==3.0.4",
"setuptools",
"starlette>=0.37.2",
"pytest==9.0.3",
"pytest-cov==7.1.0",
"boto3==1.43.14",
"google-cloud-aiplatform>=1.3",
"openai>=1.99.5",
"pillow-heif==1.3.0",
"Pillow==12.2.0",
"textual",
"python-dotenv==1.2.2",
"PyYAML==6.0.3",
"jsonschema==4.26.0",
"z3-solver==4.16.0.0",
"fastapi>=0.115.0",
"uvicorn[standard]>=0.32.0",
"websockets>=13.0",
"watchdog>=4.0.0",
"tiktoken>=0.7.0",
"tree-sitter==0.25.2",
"tree-sitter-javascript==0.25.0",
"tree-sitter-typescript==0.23.2",
"filelock>=3.12"]
requires-python = ">=3.12"
[project.urls]
Homepage = "https://github.com/promptdriven/pdd.git"
Repository = "https://github.com/promptdriven/pdd.git"
Issue-Tracker = "https://github.com/promptdriven/pdd/issues"
[project.scripts]
pdd = "pdd.cli:cli"
pdd-sync-checker = "pdd.sync_core.released_checker:main"
pdd-sync-verify = "pdd.sync_core.certificate_verifier:main"
[tool.setuptools]
packages = ["pdd", "pdd.commands", "pdd.core", "pdd.server", "pdd.server.routes", "pdd.sync_core"]
[tool.setuptools.package-data]
"pdd" = [
"prompts/*_LLM.prompt",
"templates/**",
"data/*",
"schemas/*.schema.json",
"docs/prompting_guide.md",
"mcp_config.json",
"*.zsh",
"*.fish",
"*.sh",
"frontend/dist/**",
"frontend/dist/*",
"sync_core/native/*.c",
]
[tool.setuptools.exclude-package-data]
"pdd" = ["sync_core/native/*.node"]
[project.optional-dependencies]
dev = [
"setuptools>=64",
"setuptools-scm>=8",
"wheel",
"pytest-cov",
"pytest-testmon",
"pytest-xdist",
"pytest-mock",
"pytest-asyncio",
"pytest-timeout",
"pexpect>=4.9",
"build",
"twine"
]
# Optional defaults for `pdd checkup simplify` (multi-provider harness).
# [tool.pdd.checkup.simplify]
# max_files = 20
# attempts = 3
# focus = "focus on error handling"
# engine = "claude" # claude | codex | gemini | opencode | auto
#
# [tool.pdd.checkup.simplify.commands]
# format = "ruff format"
# lint = "ruff check"
# typecheck = "mypy pdd"
# test = "pytest -q"
[tool.pytest.ini_options]
asyncio_mode = "strict"
asyncio_default_fixture_loop_scope = "function"
testpaths = ["tests"]
timeout = 300
addopts = "--strict-markers --strict-config"
markers = [
"real: mark a test as requiring real resources (e.g. API calls)",
"integration: mark a test as an integration test (makes real API calls, costs money)",
"slow: mark a test as slow-running",
"e2e: mark a test as E2E test (uses real LLM calls, costs money, runs slowly)",
"timeout: mark a test with a custom timeout in seconds",
"private_prompt: mark a test as exercising a private prompt fixture not shipped in the public repo",
"uses_real_cli_detector: mark a test that exercises the real CLI detector instead of a stub",
"prose_judge: mark a test that judges free-form LLM prose with a heuristic (regex) oracle. Rephrasing by the model flips the verdict without any product regression, so these are advisory: the cloud gate deselects them and reports their outcome separately instead of blocking on it.",
"story(story_id, story_hash): mark a story-backed regression test (deterministic/offline executable oracle for a user story)",
]
filterwarnings = [
"ignore:.*Pydantic V1 style.*deprecated.*",
"ignore:.*Accessing the 'model_fields' attribute on the instance is deprecated.*",
"ignore:datetime\\.datetime\\.utcnow\\(\\) is deprecated:DeprecationWarning:botocore\\.auth.*",
"ignore::UserWarning:pydantic.main",
"ignore:Use 'content=<\\.\\.\\.>' to upload raw bytes/text content:DeprecationWarning:httpx._models",
"ignore:Support for class-based.*config.*is deprecated:DeprecationWarning",
]
[tool.setuptools_scm]
version_file = "pdd/_version.py"
tag_regex = "^v(?P<version>\\d+\\.\\d+\\.\\d+)$"
local_scheme = "no-local-version"
[tool.coverage.run]
# pytest-cov 7 removed its .pth-based subprocess coverage support. Use
# coverage.py 7.10+ patch directives so child processes (notably
# pdd/sync_orchestration.py's worker subprocesses) are still measured.
# Enabling the `subprocess` patch implicitly turns on `parallel = true`,
# producing per-process data files that `coverage combine` merges.
patch = ["subprocess"]
[tool.coverage.report]
# Mirrors the fallback excludes that pdd/sync_orchestration.py applies
# via a temporary --cov-config when no project coverage config is
# present. Declaring [tool.coverage.run] above flips _has_coverage_config
# to True, which suppresses that fallback, so we must restate the
# excludes here to keep `if __name__ == "__main__":` and `pragma: no
# cover` lines out of coverage measurement.
exclude_lines = [
"if __name__ == .__main__.",
"pragma: no cover",
]