pdd-cli 0.0.45__py3-none-any.whl → 0.0.90__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- pdd/__init__.py +4 -4
- pdd/agentic_common.py +863 -0
- pdd/agentic_crash.py +534 -0
- pdd/agentic_fix.py +1179 -0
- pdd/agentic_langtest.py +162 -0
- pdd/agentic_update.py +370 -0
- pdd/agentic_verify.py +183 -0
- pdd/auto_deps_main.py +15 -5
- pdd/auto_include.py +63 -5
- pdd/bug_main.py +3 -2
- pdd/bug_to_unit_test.py +2 -0
- pdd/change_main.py +11 -4
- pdd/cli.py +22 -1181
- pdd/cmd_test_main.py +73 -21
- pdd/code_generator.py +58 -18
- pdd/code_generator_main.py +672 -25
- pdd/commands/__init__.py +42 -0
- pdd/commands/analysis.py +248 -0
- pdd/commands/fix.py +140 -0
- pdd/commands/generate.py +257 -0
- pdd/commands/maintenance.py +174 -0
- pdd/commands/misc.py +79 -0
- pdd/commands/modify.py +230 -0
- pdd/commands/report.py +144 -0
- pdd/commands/templates.py +215 -0
- pdd/commands/utility.py +110 -0
- pdd/config_resolution.py +58 -0
- pdd/conflicts_main.py +8 -3
- pdd/construct_paths.py +258 -82
- pdd/context_generator.py +10 -2
- pdd/context_generator_main.py +113 -11
- pdd/continue_generation.py +47 -7
- pdd/core/__init__.py +0 -0
- pdd/core/cli.py +503 -0
- pdd/core/dump.py +554 -0
- pdd/core/errors.py +63 -0
- pdd/core/utils.py +90 -0
- pdd/crash_main.py +44 -11
- pdd/data/language_format.csv +71 -63
- pdd/data/llm_model.csv +20 -18
- pdd/detect_change_main.py +5 -4
- pdd/fix_code_loop.py +330 -76
- pdd/fix_error_loop.py +207 -61
- pdd/fix_errors_from_unit_tests.py +4 -3
- pdd/fix_main.py +75 -18
- pdd/fix_verification_errors.py +12 -100
- pdd/fix_verification_errors_loop.py +306 -272
- pdd/fix_verification_main.py +28 -9
- pdd/generate_output_paths.py +93 -10
- pdd/generate_test.py +16 -5
- pdd/get_jwt_token.py +9 -2
- pdd/get_run_command.py +73 -0
- pdd/get_test_command.py +68 -0
- pdd/git_update.py +70 -19
- pdd/incremental_code_generator.py +2 -2
- pdd/insert_includes.py +11 -3
- pdd/llm_invoke.py +1269 -103
- pdd/load_prompt_template.py +36 -10
- pdd/pdd_completion.fish +25 -2
- pdd/pdd_completion.sh +30 -4
- pdd/pdd_completion.zsh +79 -4
- pdd/postprocess.py +10 -3
- pdd/preprocess.py +228 -15
- pdd/preprocess_main.py +8 -5
- pdd/prompts/agentic_crash_explore_LLM.prompt +49 -0
- pdd/prompts/agentic_fix_explore_LLM.prompt +45 -0
- pdd/prompts/agentic_fix_harvest_only_LLM.prompt +48 -0
- pdd/prompts/agentic_fix_primary_LLM.prompt +85 -0
- pdd/prompts/agentic_update_LLM.prompt +1071 -0
- pdd/prompts/agentic_verify_explore_LLM.prompt +45 -0
- pdd/prompts/auto_include_LLM.prompt +100 -905
- pdd/prompts/detect_change_LLM.prompt +122 -20
- pdd/prompts/example_generator_LLM.prompt +22 -1
- pdd/prompts/extract_code_LLM.prompt +5 -1
- pdd/prompts/extract_program_code_fix_LLM.prompt +7 -1
- pdd/prompts/extract_prompt_update_LLM.prompt +7 -8
- pdd/prompts/extract_promptline_LLM.prompt +17 -11
- pdd/prompts/find_verification_errors_LLM.prompt +6 -0
- pdd/prompts/fix_code_module_errors_LLM.prompt +4 -2
- pdd/prompts/fix_errors_from_unit_tests_LLM.prompt +8 -0
- pdd/prompts/fix_verification_errors_LLM.prompt +22 -0
- pdd/prompts/generate_test_LLM.prompt +21 -6
- pdd/prompts/increase_tests_LLM.prompt +1 -5
- pdd/prompts/insert_includes_LLM.prompt +228 -108
- pdd/prompts/trace_LLM.prompt +25 -22
- pdd/prompts/unfinished_prompt_LLM.prompt +85 -1
- pdd/prompts/update_prompt_LLM.prompt +22 -1
- pdd/pytest_output.py +127 -12
- pdd/render_mermaid.py +236 -0
- pdd/setup_tool.py +648 -0
- pdd/simple_math.py +2 -0
- pdd/split_main.py +3 -2
- pdd/summarize_directory.py +49 -6
- pdd/sync_determine_operation.py +543 -98
- pdd/sync_main.py +81 -31
- pdd/sync_orchestration.py +1334 -751
- pdd/sync_tui.py +848 -0
- pdd/template_registry.py +264 -0
- pdd/templates/architecture/architecture_json.prompt +242 -0
- pdd/templates/generic/generate_prompt.prompt +174 -0
- pdd/trace.py +168 -12
- pdd/trace_main.py +4 -3
- pdd/track_cost.py +151 -61
- pdd/unfinished_prompt.py +49 -3
- pdd/update_main.py +549 -67
- pdd/update_model_costs.py +2 -2
- pdd/update_prompt.py +19 -4
- {pdd_cli-0.0.45.dist-info → pdd_cli-0.0.90.dist-info}/METADATA +19 -6
- pdd_cli-0.0.90.dist-info/RECORD +153 -0
- {pdd_cli-0.0.45.dist-info → pdd_cli-0.0.90.dist-info}/licenses/LICENSE +1 -1
- pdd_cli-0.0.45.dist-info/RECORD +0 -116
- {pdd_cli-0.0.45.dist-info → pdd_cli-0.0.90.dist-info}/WHEEL +0 -0
- {pdd_cli-0.0.45.dist-info → pdd_cli-0.0.90.dist-info}/entry_points.txt +0 -0
- {pdd_cli-0.0.45.dist-info → pdd_cli-0.0.90.dist-info}/top_level.txt +0 -0
pdd/summarize_directory.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from typing import Optional, Tuple
|
|
1
|
+
from typing import Callable, Optional, Tuple
|
|
2
2
|
from datetime import datetime
|
|
3
3
|
try:
|
|
4
4
|
from datetime import UTC
|
|
@@ -88,7 +88,8 @@ def summarize_directory(
|
|
|
88
88
|
temperature: float,
|
|
89
89
|
verbose: bool,
|
|
90
90
|
time: float = DEFAULT_TIME,
|
|
91
|
-
csv_file: Optional[str] = None
|
|
91
|
+
csv_file: Optional[str] = None,
|
|
92
|
+
progress_callback: Optional[Callable[[int, int], None]] = None
|
|
92
93
|
) -> Tuple[str, float, str]:
|
|
93
94
|
"""
|
|
94
95
|
Summarize files in a directory and generate a CSV containing the summaries.
|
|
@@ -100,6 +101,8 @@ def summarize_directory(
|
|
|
100
101
|
verbose (bool): Whether to print out the details of the function.
|
|
101
102
|
time (float): Time budget for LLM calls.
|
|
102
103
|
csv_file (Optional[str]): Current CSV file contents if it already exists.
|
|
104
|
+
progress_callback (Optional[Callable[[int, int], None]]): Callback for progress updates.
|
|
105
|
+
Called with (current, total) for each file processed. Used by TUI ProgressBar.
|
|
103
106
|
|
|
104
107
|
Returns:
|
|
105
108
|
Tuple[str, float, str]: A tuple containing:
|
|
@@ -131,17 +134,57 @@ def summarize_directory(
|
|
|
131
134
|
raise ValueError("Invalid CSV file format.")
|
|
132
135
|
existing_data = parse_existing_csv(csv_file, verbose)
|
|
133
136
|
|
|
137
|
+
# Expand directory_path: support plain directories or glob patterns
|
|
138
|
+
try:
|
|
139
|
+
normalized_input = normalize_path(directory_path)
|
|
140
|
+
except Exception:
|
|
141
|
+
normalized_input = directory_path
|
|
142
|
+
|
|
143
|
+
if os.path.isdir(normalized_input):
|
|
144
|
+
# Recursively include all files under the directory
|
|
145
|
+
search_pattern = os.path.join(normalized_input, "**", "*")
|
|
146
|
+
else:
|
|
147
|
+
# Treat as a glob pattern (may be a single file path too)
|
|
148
|
+
search_pattern = directory_path
|
|
149
|
+
|
|
134
150
|
# Get list of files first to ensure consistent order
|
|
135
|
-
|
|
136
|
-
if not
|
|
151
|
+
all_files = sorted(glob.glob(search_pattern, recursive=True))
|
|
152
|
+
if not all_files:
|
|
137
153
|
if verbose:
|
|
138
154
|
print("[yellow]No files found.[/yellow]")
|
|
139
155
|
return csv_output, total_cost, model_name
|
|
140
156
|
|
|
157
|
+
# Pre-filter to get only processable files (for accurate progress count)
|
|
158
|
+
files = [
|
|
159
|
+
f for f in all_files
|
|
160
|
+
if not os.path.isdir(f)
|
|
161
|
+
and '__pycache__' not in f
|
|
162
|
+
and not f.endswith(('.pyc', '.pyo'))
|
|
163
|
+
]
|
|
164
|
+
|
|
165
|
+
if not files:
|
|
166
|
+
if verbose:
|
|
167
|
+
print("[yellow]No processable files found.[/yellow]")
|
|
168
|
+
return csv_output, total_cost, model_name
|
|
169
|
+
|
|
141
170
|
# Get all modification times at once to ensure consistent order
|
|
142
171
|
file_mod_times = {f: os.path.getmtime(f) for f in files}
|
|
143
172
|
|
|
144
|
-
|
|
173
|
+
# Determine iteration method: use callback if provided, else track()
|
|
174
|
+
# Disable track() when in TUI context (COLUMNS env var set) or callback provided
|
|
175
|
+
total_files = len(files)
|
|
176
|
+
use_track = progress_callback is None and "COLUMNS" not in os.environ
|
|
177
|
+
|
|
178
|
+
if use_track:
|
|
179
|
+
file_iterator = track(files, description="Processing files...")
|
|
180
|
+
else:
|
|
181
|
+
file_iterator = files
|
|
182
|
+
|
|
183
|
+
for idx, file_path in enumerate(file_iterator):
|
|
184
|
+
# Report progress if callback provided
|
|
185
|
+
if progress_callback is not None:
|
|
186
|
+
progress_callback(idx + 1, total_files)
|
|
187
|
+
|
|
145
188
|
try:
|
|
146
189
|
relative_path = os.path.relpath(file_path)
|
|
147
190
|
normalized_path = normalize_path(relative_path)
|
|
@@ -219,4 +262,4 @@ def summarize_directory(
|
|
|
219
262
|
|
|
220
263
|
except Exception as e:
|
|
221
264
|
print(f"[red]An error occurred: {str(e)}[/red]")
|
|
222
|
-
raise
|
|
265
|
+
raise
|