pdd-cli 0.0.45__py3-none-any.whl → 0.0.47__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.
Potentially problematic release.
This version of pdd-cli might be problematic. Click here for more details.
- pdd/__init__.py +1 -1
- pdd/cli.py +42 -0
- pdd/cmd_test_main.py +5 -0
- pdd/construct_paths.py +16 -7
- pdd/fix_error_loop.py +36 -5
- pdd/llm_invoke.py +45 -7
- pdd/prompts/auto_include_LLM.prompt +49 -903
- pdd/summarize_directory.py +5 -0
- pdd/sync_determine_operation.py +163 -51
- pdd/sync_orchestration.py +213 -49
- pdd/update_model_costs.py +2 -2
- {pdd_cli-0.0.45.dist-info → pdd_cli-0.0.47.dist-info}/METADATA +3 -3
- {pdd_cli-0.0.45.dist-info → pdd_cli-0.0.47.dist-info}/RECORD +17 -17
- {pdd_cli-0.0.45.dist-info → pdd_cli-0.0.47.dist-info}/WHEEL +0 -0
- {pdd_cli-0.0.45.dist-info → pdd_cli-0.0.47.dist-info}/entry_points.txt +0 -0
- {pdd_cli-0.0.45.dist-info → pdd_cli-0.0.47.dist-info}/licenses/LICENSE +0 -0
- {pdd_cli-0.0.45.dist-info → pdd_cli-0.0.47.dist-info}/top_level.txt +0 -0
pdd/sync_orchestration.py
CHANGED
|
@@ -23,10 +23,12 @@ from .sync_determine_operation import (
|
|
|
23
23
|
sync_determine_operation,
|
|
24
24
|
get_pdd_file_paths,
|
|
25
25
|
RunReport,
|
|
26
|
+
SyncDecision,
|
|
26
27
|
PDD_DIR,
|
|
27
28
|
META_DIR,
|
|
28
29
|
SyncLock,
|
|
29
30
|
read_run_report,
|
|
31
|
+
estimate_operation_cost,
|
|
30
32
|
)
|
|
31
33
|
from .auto_deps_main import auto_deps_main
|
|
32
34
|
from .code_generator_main import code_generator_main
|
|
@@ -144,6 +146,13 @@ def _execute_tests_and_create_run_report(test_file: Path, basename: str, languag
|
|
|
144
146
|
python_executable = detect_host_python_executable()
|
|
145
147
|
|
|
146
148
|
# Determine coverage target based on module location
|
|
149
|
+
# Note: base_package is not defined in this context, using dynamic discovery
|
|
150
|
+
try:
|
|
151
|
+
# Try to determine base package from module structure
|
|
152
|
+
base_package = None # Will be determined dynamically below
|
|
153
|
+
except:
|
|
154
|
+
base_package = None
|
|
155
|
+
|
|
147
156
|
if base_package:
|
|
148
157
|
cov_target = f'{base_package}.{module_name}'
|
|
149
158
|
else:
|
|
@@ -163,7 +172,7 @@ def _execute_tests_and_create_run_report(test_file: Path, basename: str, languag
|
|
|
163
172
|
|
|
164
173
|
exit_code = result.returncode
|
|
165
174
|
stdout = result.stdout
|
|
166
|
-
stderr
|
|
175
|
+
# stderr is captured but not currently used for parsing
|
|
167
176
|
|
|
168
177
|
# Parse test results from pytest output
|
|
169
178
|
tests_passed = 0
|
|
@@ -202,7 +211,7 @@ def _execute_tests_and_create_run_report(test_file: Path, basename: str, languag
|
|
|
202
211
|
coverage=coverage
|
|
203
212
|
)
|
|
204
213
|
|
|
205
|
-
except (subprocess.TimeoutExpired, subprocess.CalledProcessError, Exception)
|
|
214
|
+
except (subprocess.TimeoutExpired, subprocess.CalledProcessError, Exception):
|
|
206
215
|
# If test execution fails, create a report indicating failure
|
|
207
216
|
report = RunReport(
|
|
208
217
|
timestamp=timestamp,
|
|
@@ -338,12 +347,43 @@ def sync_orchestration(
|
|
|
338
347
|
|
|
339
348
|
Returns a dictionary summarizing the outcome of the sync process.
|
|
340
349
|
"""
|
|
350
|
+
# Import get_extension at function scope
|
|
351
|
+
from .sync_determine_operation import get_extension
|
|
352
|
+
|
|
341
353
|
if log:
|
|
342
354
|
return _display_sync_log(basename, language, verbose)
|
|
343
355
|
|
|
344
356
|
# --- Initialize State and Paths ---
|
|
345
357
|
try:
|
|
346
358
|
pdd_files = get_pdd_file_paths(basename, language, prompts_dir)
|
|
359
|
+
# Debug: Print the paths we got
|
|
360
|
+
print(f"DEBUG: get_pdd_file_paths returned:")
|
|
361
|
+
print(f" test: {pdd_files.get('test', 'N/A')}")
|
|
362
|
+
print(f" code: {pdd_files.get('code', 'N/A')}")
|
|
363
|
+
print(f" example: {pdd_files.get('example', 'N/A')}")
|
|
364
|
+
except FileNotFoundError as e:
|
|
365
|
+
# Check if it's specifically the test file that's missing
|
|
366
|
+
if "test_config.py" in str(e) or "tests/test_" in str(e):
|
|
367
|
+
# Test file missing is expected during sync workflow - create minimal paths to continue
|
|
368
|
+
pdd_files = {
|
|
369
|
+
'prompt': Path(prompts_dir) / f"{basename}_{language}.prompt",
|
|
370
|
+
'code': Path(f"src/{basename}.{get_extension(language)}"),
|
|
371
|
+
'example': Path(f"context/{basename}_example.{get_extension(language)}"),
|
|
372
|
+
'test': Path(f"tests/test_{basename}.{get_extension(language)}")
|
|
373
|
+
}
|
|
374
|
+
if not quiet:
|
|
375
|
+
print(f"Note: Test file missing, continuing with sync workflow to generate it")
|
|
376
|
+
else:
|
|
377
|
+
# Other file missing - this is a real error
|
|
378
|
+
print(f"Error constructing paths: {e}")
|
|
379
|
+
return {
|
|
380
|
+
"success": False,
|
|
381
|
+
"total_cost": 0.0,
|
|
382
|
+
"model_name": "",
|
|
383
|
+
"error": f"Failed to construct paths: {str(e)}",
|
|
384
|
+
"operations_completed": [],
|
|
385
|
+
"errors": [f"Path construction failed: {str(e)}"]
|
|
386
|
+
}
|
|
347
387
|
except Exception as e:
|
|
348
388
|
# Log the error and return early with failure status
|
|
349
389
|
print(f"Error constructing paths: {e}")
|
|
@@ -422,6 +462,32 @@ def sync_orchestration(
|
|
|
422
462
|
# Track operation history
|
|
423
463
|
operation_history.append(operation)
|
|
424
464
|
|
|
465
|
+
# Detect auto-deps infinite loops (CRITICAL FIX)
|
|
466
|
+
if len(operation_history) >= 3:
|
|
467
|
+
recent_auto_deps = [op for op in operation_history[-3:] if op == 'auto-deps']
|
|
468
|
+
if len(recent_auto_deps) >= 2:
|
|
469
|
+
errors.append("Detected auto-deps infinite loop. Force advancing to generate operation.")
|
|
470
|
+
log_sync_event(basename, language, "cycle_detected", {
|
|
471
|
+
"cycle_type": "auto-deps-infinite",
|
|
472
|
+
"consecutive_auto_deps": len(recent_auto_deps),
|
|
473
|
+
"operation_history": operation_history[-10:] # Last 10 operations
|
|
474
|
+
})
|
|
475
|
+
|
|
476
|
+
# Force generate operation to break the cycle
|
|
477
|
+
operation = 'generate'
|
|
478
|
+
decision = SyncDecision(
|
|
479
|
+
operation='generate',
|
|
480
|
+
reason='Forced generate to break auto-deps infinite loop',
|
|
481
|
+
confidence=1.0,
|
|
482
|
+
estimated_cost=estimate_operation_cost('generate'),
|
|
483
|
+
details={
|
|
484
|
+
'decision_type': 'cycle_breaker',
|
|
485
|
+
'forced_operation': True,
|
|
486
|
+
'original_operation': 'auto-deps'
|
|
487
|
+
}
|
|
488
|
+
)
|
|
489
|
+
log_entry = create_sync_log_entry(decision, budget_remaining)
|
|
490
|
+
|
|
425
491
|
# Detect crash-verify cycles
|
|
426
492
|
if len(operation_history) >= 4:
|
|
427
493
|
# Check for repeating crash-verify pattern
|
|
@@ -584,7 +650,7 @@ def sync_orchestration(
|
|
|
584
650
|
result = auto_deps_main(
|
|
585
651
|
ctx,
|
|
586
652
|
prompt_file=str(pdd_files['prompt']),
|
|
587
|
-
directory_path=examples_dir,
|
|
653
|
+
directory_path=f"{examples_dir}/*",
|
|
588
654
|
auto_deps_csv_path="project_dependencies.csv",
|
|
589
655
|
output=temp_output,
|
|
590
656
|
force_scan=False # Don't force scan every time
|
|
@@ -659,12 +725,22 @@ def sync_orchestration(
|
|
|
659
725
|
|
|
660
726
|
# Try to run the example program to get additional error details
|
|
661
727
|
try:
|
|
728
|
+
# Ensure PYTHONPATH includes src directory for imports
|
|
729
|
+
env = os.environ.copy()
|
|
730
|
+
src_dir = Path.cwd() / 'src'
|
|
731
|
+
if src_dir.exists():
|
|
732
|
+
current_pythonpath = env.get('PYTHONPATH', '')
|
|
733
|
+
if current_pythonpath:
|
|
734
|
+
env['PYTHONPATH'] = f"{src_dir}:{current_pythonpath}"
|
|
735
|
+
else:
|
|
736
|
+
env['PYTHONPATH'] = str(src_dir)
|
|
737
|
+
|
|
662
738
|
example_result = subprocess.run(
|
|
663
739
|
['python', str(pdd_files['example'])],
|
|
664
740
|
capture_output=True,
|
|
665
741
|
text=True,
|
|
666
742
|
timeout=60,
|
|
667
|
-
env=
|
|
743
|
+
env=env,
|
|
668
744
|
cwd=str(pdd_files['example'].parent)
|
|
669
745
|
)
|
|
670
746
|
|
|
@@ -689,33 +765,93 @@ def sync_orchestration(
|
|
|
689
765
|
crash_log_content += f"Error running example program: {str(e)}\n"
|
|
690
766
|
crash_log_content += f"Program path: {pdd_files['example']}\n"
|
|
691
767
|
else:
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
'
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
768
|
+
|
|
769
|
+
# No run report exists - need to actually test the example to see if it crashes
|
|
770
|
+
print("No run report exists, testing example for crashes")
|
|
771
|
+
try:
|
|
772
|
+
# Ensure PYTHONPATH includes src directory for imports
|
|
773
|
+
env = os.environ.copy()
|
|
774
|
+
src_dir = Path.cwd() / 'src'
|
|
775
|
+
if src_dir.exists():
|
|
776
|
+
current_pythonpath = env.get('PYTHONPATH', '')
|
|
777
|
+
if current_pythonpath:
|
|
778
|
+
env['PYTHONPATH'] = f"{src_dir}:{current_pythonpath}"
|
|
779
|
+
else:
|
|
780
|
+
env['PYTHONPATH'] = str(src_dir)
|
|
781
|
+
|
|
782
|
+
|
|
783
|
+
example_result = subprocess.run(
|
|
784
|
+
['python', str(pdd_files['example'])],
|
|
785
|
+
capture_output=True,
|
|
786
|
+
text=True,
|
|
787
|
+
|
|
788
|
+
timeout=60,
|
|
789
|
+
env=env,
|
|
790
|
+
|
|
791
|
+
cwd=str(pdd_files['example'].parent)
|
|
792
|
+
)
|
|
793
|
+
|
|
794
|
+
if example_result.returncode != 0:
|
|
795
|
+
# Example crashes - create crash log and fix it
|
|
796
|
+
crash_log_content = f"Example program failed with exit code: {example_result.returncode}\n\n"
|
|
797
|
+
if example_result.stdout:
|
|
798
|
+
crash_log_content += f"STDOUT:\n{example_result.stdout}\n\n"
|
|
799
|
+
if example_result.stderr:
|
|
800
|
+
crash_log_content += f"STDERR:\n{example_result.stderr}\n"
|
|
801
|
+
|
|
802
|
+
# Check for syntax errors specifically
|
|
803
|
+
if "SyntaxError" in example_result.stderr:
|
|
804
|
+
crash_log_content = f"SYNTAX ERROR DETECTED:\n\n{crash_log_content}"
|
|
805
|
+
|
|
806
|
+
# Save the crash log and proceed with crash fixing
|
|
807
|
+
Path("crash.log").write_text(crash_log_content)
|
|
808
|
+
print(f"Example crashes with exit code {example_result.returncode}, proceeding with crash fix")
|
|
809
|
+
|
|
810
|
+
# Don't skip - let the crash fix continue
|
|
811
|
+
# The crash_log_content is already set up, so continue to the crash_main call
|
|
812
|
+
else:
|
|
813
|
+
# Example runs successfully - no crash to fix
|
|
814
|
+
print("Example runs successfully, no crash detected, skipping crash fix")
|
|
815
|
+
skipped_operations.append('crash')
|
|
816
|
+
|
|
817
|
+
# Update log entry for skipped operation
|
|
818
|
+
update_sync_log_entry(log_entry, {
|
|
819
|
+
'success': True,
|
|
820
|
+
'cost': 0.0,
|
|
821
|
+
'model': 'skipped',
|
|
822
|
+
'error': None
|
|
823
|
+
}, time.time() - start_time)
|
|
824
|
+
log_entry['details']['skip_reason'] = 'no_crash_detected'
|
|
825
|
+
append_sync_log(basename, language, log_entry)
|
|
826
|
+
|
|
827
|
+
# Create run report with successful execution
|
|
828
|
+
report_data = RunReport(
|
|
829
|
+
timestamp=datetime.datetime.now(datetime.timezone.utc).isoformat(),
|
|
830
|
+
exit_code=0, tests_passed=1, tests_failed=0, coverage=100.0
|
|
831
|
+
)
|
|
832
|
+
save_run_report(asdict(report_data), basename, language)
|
|
833
|
+
_save_operation_fingerprint(basename, language, 'crash', pdd_files, 0.0, 'no_crash_detected')
|
|
834
|
+
continue
|
|
835
|
+
|
|
836
|
+
except subprocess.TimeoutExpired:
|
|
837
|
+
# Example timed out - treat as a crash
|
|
838
|
+
crash_log_content = "Example program execution timed out after 60 seconds\n"
|
|
839
|
+
crash_log_content += "This may indicate an infinite loop or the program is waiting for input.\n"
|
|
840
|
+
Path("crash.log").write_text(crash_log_content)
|
|
841
|
+
print("Example timed out, proceeding with crash fix")
|
|
842
|
+
|
|
843
|
+
except Exception as e:
|
|
844
|
+
# Error running example - treat as a crash
|
|
845
|
+
crash_log_content = f"Error running example program: {str(e)}\n"
|
|
846
|
+
crash_log_content += f"Program path: {pdd_files['example']}\n"
|
|
847
|
+
Path("crash.log").write_text(crash_log_content)
|
|
848
|
+
print(f"Error running example: {e}, proceeding with crash fix")
|
|
717
849
|
|
|
718
|
-
|
|
850
|
+
# Write actual error content or fallback (only if we haven't already written it)
|
|
851
|
+
if not Path("crash.log").exists():
|
|
852
|
+
if not crash_log_content:
|
|
853
|
+
crash_log_content = "Unknown crash error - program failed but no error output captured"
|
|
854
|
+
Path("crash.log").write_text(crash_log_content)
|
|
719
855
|
|
|
720
856
|
try:
|
|
721
857
|
result = crash_main(
|
|
@@ -774,6 +910,14 @@ def sync_orchestration(
|
|
|
774
910
|
)
|
|
775
911
|
elif operation == 'test':
|
|
776
912
|
# First, generate the test file
|
|
913
|
+
# Ensure the test directory exists
|
|
914
|
+
test_path = pdd_files['test']
|
|
915
|
+
if isinstance(test_path, Path):
|
|
916
|
+
# Debug logging
|
|
917
|
+
if not quiet:
|
|
918
|
+
print(f"Creating test directory: {test_path.parent}")
|
|
919
|
+
test_path.parent.mkdir(parents=True, exist_ok=True)
|
|
920
|
+
|
|
777
921
|
result = cmd_test_main(
|
|
778
922
|
ctx,
|
|
779
923
|
prompt_file=str(pdd_files['prompt']),
|
|
@@ -786,29 +930,38 @@ def sync_orchestration(
|
|
|
786
930
|
merge=False
|
|
787
931
|
)
|
|
788
932
|
|
|
789
|
-
# After
|
|
790
|
-
|
|
933
|
+
# After test generation, check if the test file was actually created
|
|
934
|
+
test_file = pdd_files['test']
|
|
935
|
+
test_generation_successful = False
|
|
936
|
+
|
|
791
937
|
if isinstance(result, dict) and result.get('success', False):
|
|
938
|
+
test_generation_successful = True
|
|
939
|
+
elif isinstance(result, tuple) and len(result) >= 3:
|
|
940
|
+
# For tuple format, check if the test file actually exists rather than assuming success
|
|
941
|
+
test_generation_successful = test_file.exists()
|
|
942
|
+
|
|
943
|
+
if test_generation_successful and test_file.exists():
|
|
792
944
|
try:
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
test_file, basename, language, target_coverage
|
|
797
|
-
)
|
|
945
|
+
_execute_tests_and_create_run_report(
|
|
946
|
+
test_file, basename, language, target_coverage
|
|
947
|
+
)
|
|
798
948
|
except Exception as e:
|
|
799
949
|
# Don't fail the entire operation if test execution fails
|
|
800
950
|
# Just log it - the test file generation was successful
|
|
801
951
|
print(f"Warning: Test execution failed: {e}")
|
|
802
|
-
|
|
803
|
-
#
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
952
|
+
else:
|
|
953
|
+
# Test generation failed or test file was not created
|
|
954
|
+
error_msg = f"Test generation failed - test file not created: {test_file}"
|
|
955
|
+
print(f"Error: {error_msg}")
|
|
956
|
+
update_sync_log_entry(log_entry, {
|
|
957
|
+
'success': False,
|
|
958
|
+
'cost': 0.0,
|
|
959
|
+
'model': 'N/A',
|
|
960
|
+
'error': error_msg
|
|
961
|
+
}, 0.0)
|
|
962
|
+
append_sync_log(basename, language, log_entry)
|
|
963
|
+
errors.append(error_msg)
|
|
964
|
+
break
|
|
812
965
|
elif operation == 'fix':
|
|
813
966
|
# Create error file with actual test failure information
|
|
814
967
|
error_file_path = Path("fix_errors.log")
|
|
@@ -816,7 +969,8 @@ def sync_orchestration(
|
|
|
816
969
|
# Try to get actual test failure details from latest run
|
|
817
970
|
try:
|
|
818
971
|
run_report = read_run_report(basename, language)
|
|
819
|
-
|
|
972
|
+
test_file = pdd_files.get('test')
|
|
973
|
+
if run_report and run_report.tests_failed > 0 and test_file and test_file.exists():
|
|
820
974
|
# Run the tests again to capture actual error output
|
|
821
975
|
# Use environment-aware Python executable for pytest execution
|
|
822
976
|
python_executable = detect_host_python_executable()
|
|
@@ -934,12 +1088,22 @@ def sync_orchestration(
|
|
|
934
1088
|
if example_file.exists():
|
|
935
1089
|
# Run the example program to check if crash is actually fixed
|
|
936
1090
|
try:
|
|
1091
|
+
# Ensure PYTHONPATH includes src directory for imports
|
|
1092
|
+
env = os.environ.copy()
|
|
1093
|
+
src_dir = Path.cwd() / 'src'
|
|
1094
|
+
if src_dir.exists():
|
|
1095
|
+
current_pythonpath = env.get('PYTHONPATH', '')
|
|
1096
|
+
if current_pythonpath:
|
|
1097
|
+
env['PYTHONPATH'] = f"{src_dir}:{current_pythonpath}"
|
|
1098
|
+
else:
|
|
1099
|
+
env['PYTHONPATH'] = str(src_dir)
|
|
1100
|
+
|
|
937
1101
|
example_result = subprocess.run(
|
|
938
1102
|
['python', str(example_file)],
|
|
939
1103
|
capture_output=True,
|
|
940
1104
|
text=True,
|
|
941
1105
|
timeout=60,
|
|
942
|
-
env=
|
|
1106
|
+
env=env,
|
|
943
1107
|
cwd=str(example_file.parent)
|
|
944
1108
|
)
|
|
945
1109
|
|
pdd/update_model_costs.py
CHANGED
|
@@ -404,8 +404,8 @@ def main():
|
|
|
404
404
|
parser.add_argument(
|
|
405
405
|
"--csv-path",
|
|
406
406
|
type=str,
|
|
407
|
-
default="
|
|
408
|
-
help="Path to the llm_model.csv file (default:
|
|
407
|
+
default=".pdd/llm_model.csv",
|
|
408
|
+
help="Path to the llm_model.csv file (default: .pdd/llm_model.csv)"
|
|
409
409
|
)
|
|
410
410
|
args = parser.parse_args()
|
|
411
411
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pdd-cli
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.47
|
|
4
4
|
Summary: PDD (Prompt-Driven Development) Command Line Interface
|
|
5
5
|
Author: Greg Tanaka
|
|
6
6
|
Author-email: glt@alumni.caltech.edu
|
|
@@ -46,7 +46,7 @@ Requires-Dist: pytest-asyncio; extra == "dev"
|
|
|
46
46
|
Requires-Dist: z3-solver; extra == "dev"
|
|
47
47
|
Dynamic: license-file
|
|
48
48
|
|
|
49
|
-
.. image:: https://img.shields.io/badge/pdd--cli-v0.0.
|
|
49
|
+
.. image:: https://img.shields.io/badge/pdd--cli-v0.0.47-blue
|
|
50
50
|
:alt: PDD-CLI Version
|
|
51
51
|
|
|
52
52
|
.. image:: https://img.shields.io/badge/Discord-join%20chat-7289DA.svg?logo=discord&logoColor=white&link=https://discord.gg/Yp4RTh8bG7
|
|
@@ -123,7 +123,7 @@ After installation, verify:
|
|
|
123
123
|
|
|
124
124
|
pdd --version
|
|
125
125
|
|
|
126
|
-
You'll see the current PDD version (e.g., 0.0.
|
|
126
|
+
You'll see the current PDD version (e.g., 0.0.47).
|
|
127
127
|
|
|
128
128
|
Getting Started with Examples
|
|
129
129
|
-----------------------------
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
pdd/__init__.py,sha256=
|
|
1
|
+
pdd/__init__.py,sha256=Dkuzn87nsXjYF_y3VgQ68D-o1f8igs1t1aCbHpy49KU,634
|
|
2
2
|
pdd/auto_deps_main.py,sha256=iV2khcgSejiXjh5hiQqeu_BJQOLfTKXhMx14j6vRlf8,3916
|
|
3
3
|
pdd/auto_include.py,sha256=OJcdcwTwJNqHPHKG9P4m9Ij-PiLex0EbuwJP0uiQi_Y,7484
|
|
4
4
|
pdd/auto_update.py,sha256=w6jzTnMiYRNpwQHQxWNiIAwQ0d6xh1iOB3xgDsabWtc,5236
|
|
@@ -6,14 +6,14 @@ pdd/bug_main.py,sha256=INFWwD3TU00cBmTqFcScAoK25LsZE1zkinmnSM7ElS0,4787
|
|
|
6
6
|
pdd/bug_to_unit_test.py,sha256=3qNz96bS1JyjKZzxUs1oIfzuLsPc8S29WmOfIKQaQ8Y,6599
|
|
7
7
|
pdd/change.py,sha256=Hg_x0pa370-e6oDiczaTgFAy3Am9ReCPkqFrvqv4U38,6114
|
|
8
8
|
pdd/change_main.py,sha256=oTQz9DUy6pIqq5CJzHIk01NrC88Xrm4FNEu0e-1Hx5Y,27748
|
|
9
|
-
pdd/cli.py,sha256=
|
|
10
|
-
pdd/cmd_test_main.py,sha256=
|
|
9
|
+
pdd/cli.py,sha256=sC86ii4kjc474taTwLkUPChkS4sD_Kdpa8O-jCBLV6w,43307
|
|
10
|
+
pdd/cmd_test_main.py,sha256=JA6pzC-JEE6pVUZrDjbKvPduYAGzxbHep-3zYOkfEms,7299
|
|
11
11
|
pdd/code_generator.py,sha256=KwbLgMfEER-qebGJdk5i25Qj3XdnHkVttjBlEeDasHs,4651
|
|
12
12
|
pdd/code_generator_main.py,sha256=7MlZPmET3xycXL3VMLW8mLI8sW3pwRDGNyFynHt8TfM,25402
|
|
13
13
|
pdd/comment_line.py,sha256=sX2hf4bG1fILi_rvI9MkkwCZ2IitgKkW7nOiw8aQKPY,1845
|
|
14
14
|
pdd/conflicts_in_prompts.py,sha256=9N3rZWdJUGayOTOgnHW9G_Jm1C9G4Y8hSLhnURc1BkY,4890
|
|
15
15
|
pdd/conflicts_main.py,sha256=U23aJqJ6pgLDDCz-AaejWnG-qsTGAhZ9024KsHR9pYU,3650
|
|
16
|
-
pdd/construct_paths.py,sha256
|
|
16
|
+
pdd/construct_paths.py,sha256=-oWSXURIDaWeQvM7uQGUote0hyf6ryD_fsTjEeEq5NI,31946
|
|
17
17
|
pdd/context_generator.py,sha256=e5ey0i7wWnxAUiwiw1gkB1_t9OFjKU2lxYKpb_eVSio,6036
|
|
18
18
|
pdd/context_generator_main.py,sha256=nJjc5L_pWTkDQzGhkHbm_C74TpgLeWGukdrb1rA5kEA,3857
|
|
19
19
|
pdd/continue_generation.py,sha256=6W2LQuQHWHSByv6zMMAVlGOCC1zEF_BAXwLPugMaC7M,5637
|
|
@@ -24,7 +24,7 @@ pdd/edit_file.py,sha256=-FhZ-KGKYkPbnt0zFiDnnosPLh3bbKmften0Ios4-90,35017
|
|
|
24
24
|
pdd/find_section.py,sha256=lz_FPY4KDCRAGlL1pWVZiutUNv7E4KsDFK-ymDWA_Ec,962
|
|
25
25
|
pdd/fix_code_loop.py,sha256=LQXYQuFMjMM4yo6oJaFKyCg9OHpFwATp6QeHm8TsGR4,24468
|
|
26
26
|
pdd/fix_code_module_errors.py,sha256=jKH88KunVhof1MYRI_F42_YnLt5k4lif4YztQgzB9g8,5446
|
|
27
|
-
pdd/fix_error_loop.py,sha256=
|
|
27
|
+
pdd/fix_error_loop.py,sha256=foWAQ_iMnpFL05ad1_wchGzWjIqLEL5AHp97NFfbt4Q,26092
|
|
28
28
|
pdd/fix_errors_from_unit_tests.py,sha256=fIqEfVIEx8PPSAzWu5nhin_remKu4c0_o51AN3g_x6s,9398
|
|
29
29
|
pdd/fix_main.py,sha256=7TbHVUM2HuzCVMY-B2iHzvy5YEnKaaSbU1ZzXN7YG3U,14004
|
|
30
30
|
pdd/fix_verification_errors.py,sha256=HvqGGdQqHq7OERmzcYP8Ft5nX_xthwVPJPG-YLv6VNM,17444
|
|
@@ -41,7 +41,7 @@ pdd/increase_tests.py,sha256=68cM9d1CpaLLm2ISFpJw39xbRjsfwxwS06yAwRoUCHk,4433
|
|
|
41
41
|
pdd/incremental_code_generator.py,sha256=cWo3DJ0PybnrepFEAMibGjTVY3T8mLVvPt5W8cNhuxU,9402
|
|
42
42
|
pdd/insert_includes.py,sha256=hNn8muRULiq3YMNI4W4pEPeM1ckiZ-EgR9WtCyWQ1eQ,5533
|
|
43
43
|
pdd/install_completion.py,sha256=bLMJuMOBDvsEnDAUpgiPesNRGhY_IvBvz8ZvmbTzP4o,5472
|
|
44
|
-
pdd/llm_invoke.py,sha256=
|
|
44
|
+
pdd/llm_invoke.py,sha256=hmgYShoBzVwil4Tjc7xa05onoT0g04sgNI65wdbT6VY,75010
|
|
45
45
|
pdd/load_prompt_template.py,sha256=4NH8_t5eon_vcyTznqtemJ_yAPkTJm_hSdTRgzj3qEQ,1907
|
|
46
46
|
pdd/logo_animation.py,sha256=n6HJWzuFze2csAAW2-zbxfjvWFYRI4hIdwVBtHBOkj4,20782
|
|
47
47
|
pdd/mcp_config.json,sha256=D3ctWHlShvltbtH37zbYb6smVE0V80_lGjDKDIqsSBE,124
|
|
@@ -57,22 +57,22 @@ pdd/pytest_output.py,sha256=IrRKYneW_F6zv9WaJwKFGnOBLFBFjk1CnhO_EVAjb9E,6612
|
|
|
57
57
|
pdd/python_env_detector.py,sha256=y-QESoPNiKaD821uz8okX-9qA-oqvH9cQHY2_MwFHzU,5194
|
|
58
58
|
pdd/split.py,sha256=9lWrh-JOjOpxRp4-s1VL7bqJMVWlsmY5LxONT7sYM8A,5288
|
|
59
59
|
pdd/split_main.py,sha256=GJzkWvDB6AA_duT2nZTRIvPmrX-ePhDRpZuog5xFCT0,4791
|
|
60
|
-
pdd/summarize_directory.py,sha256=
|
|
60
|
+
pdd/summarize_directory.py,sha256=cRKIVRWcti9SGLDuc40tsNbho7CdVbpWhlI-PoVC7xI,9528
|
|
61
61
|
pdd/sync_animation.py,sha256=e7Qb4m70BHYpl37CuuF-95j-APctPL4Zm_o1PSTTRFQ,28070
|
|
62
|
-
pdd/sync_determine_operation.py,sha256=
|
|
62
|
+
pdd/sync_determine_operation.py,sha256=16Co4_IE0AZBLPdICi2MqW3730hiyLdqOf2kZcQA2cc,59590
|
|
63
63
|
pdd/sync_main.py,sha256=2XUZZL9oIiNVsVohdsMpvrNoV8XkXhEKyt5bb2HlNHI,13641
|
|
64
|
-
pdd/sync_orchestration.py,sha256=
|
|
64
|
+
pdd/sync_orchestration.py,sha256=MG8mjqsZJHIPJqx6VfavJoF6IXn2R1ZrIG1maaERBjA,64153
|
|
65
65
|
pdd/trace.py,sha256=oXHbOMfxeso7m81N5V2ixS_l6BPAlZrH6vifn0IgWbo,5225
|
|
66
66
|
pdd/trace_main.py,sha256=Z8m8UgRZoaojX_H6aDDU7_lB7WNCLwZpFxbPTm1s-6s,4902
|
|
67
67
|
pdd/track_cost.py,sha256=VIrHYh4i2G5T5Dq1plxwuzsG4OrHQgO0GPgFckgsQ_4,3266
|
|
68
68
|
pdd/unfinished_prompt.py,sha256=aoyWPubtR36RFt1f2aqaTZVfSrqxzzbeKezTeHaDIGw,4305
|
|
69
69
|
pdd/update_main.py,sha256=okTsl-oamzCOqjpircs58urBt4Cu7PXxOztvc57088Q,4332
|
|
70
|
-
pdd/update_model_costs.py,sha256=
|
|
70
|
+
pdd/update_model_costs.py,sha256=RfeOlAHtc1FCx47A7CjrH2t5WXQclQ_9uYtNjtQh75I,22998
|
|
71
71
|
pdd/update_prompt.py,sha256=zc-HiI1cwGBkJHVmNDyoSZa13lZH90VdB9l8ajdj6Kk,4543
|
|
72
72
|
pdd/xml_tagger.py,sha256=5Bc3HRm7iz_XjBdzQIcMb8KocUQ8PELI2NN5Gw4amd4,4825
|
|
73
73
|
pdd/data/language_format.csv,sha256=yQW5PuqIpihhDF9r_4o5x1CNUU5yyx-mdhbS6GQaEEI,918
|
|
74
74
|
pdd/data/llm_model.csv,sha256=FrNhbSZ2yOi2qdcsRdjq7opRgRcm5U5BVZgaUXVyfVw,1449
|
|
75
|
-
pdd/prompts/auto_include_LLM.prompt,sha256=
|
|
75
|
+
pdd/prompts/auto_include_LLM.prompt,sha256=sNF2rdJu9wJ8c0lwjCfZ9ZReX8zGXRUNehRs1ZiyDoc,12108
|
|
76
76
|
pdd/prompts/bug_to_unit_test_LLM.prompt,sha256=KdMkvRVnjVSf0NTYIaDXIMT93xPttXEwkMpjWx5leLs,1588
|
|
77
77
|
pdd/prompts/change_LLM.prompt,sha256=5rgWIL16p3VRURd2_lNtcbu_MVRqPhI8gFIBt1gkzDQ,2164
|
|
78
78
|
pdd/prompts/code_patcher_LLM.prompt,sha256=yeV4lsRuPQzNdKRV_LQUOmmWh2yhu8YgKXUWo4bge4I,2392
|
|
@@ -108,9 +108,9 @@ pdd/prompts/trim_results_start_LLM.prompt,sha256=OKz8fAf1cYWKWgslFOHEkUpfaUDARh3
|
|
|
108
108
|
pdd/prompts/unfinished_prompt_LLM.prompt,sha256=-JgBpiPTQZdWOAwOG1XpfpD9waynFTAT3Jo84eQ4bTw,1543
|
|
109
109
|
pdd/prompts/update_prompt_LLM.prompt,sha256=prIc8uLp2jqnLTHt6JvWDZGanPZipivhhYeXe0lVaYw,1328
|
|
110
110
|
pdd/prompts/xml_convertor_LLM.prompt,sha256=YGRGXJeg6EhM9690f-SKqQrKqSJjLFD51UrPOlO0Frg,2786
|
|
111
|
-
pdd_cli-0.0.
|
|
112
|
-
pdd_cli-0.0.
|
|
113
|
-
pdd_cli-0.0.
|
|
114
|
-
pdd_cli-0.0.
|
|
115
|
-
pdd_cli-0.0.
|
|
116
|
-
pdd_cli-0.0.
|
|
111
|
+
pdd_cli-0.0.47.dist-info/licenses/LICENSE,sha256=-1bjYH-CEjGEQ8VixtnRYuu37kN6F9NxmZSDkBuUQ9o,1062
|
|
112
|
+
pdd_cli-0.0.47.dist-info/METADATA,sha256=Mq_ZHelL5ASkEOb5k0AHi-Nr2KoFYvhZRJjbC69ygWo,12399
|
|
113
|
+
pdd_cli-0.0.47.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
114
|
+
pdd_cli-0.0.47.dist-info/entry_points.txt,sha256=Kr8HtNVb8uHZtQJNH4DnF8j7WNgWQbb7_Pw5hECSR-I,36
|
|
115
|
+
pdd_cli-0.0.47.dist-info/top_level.txt,sha256=xjnhIACeMcMeDfVNREgQZl4EbTni2T11QkL5r7E-sbE,4
|
|
116
|
+
pdd_cli-0.0.47.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|