teddy-cli 0.1.17.dev1363__tar.gz → 0.1.17.dev1366__tar.gz

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.
Files changed (163) hide show
  1. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/PKG-INFO +1 -1
  2. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/pyproject.toml +3 -1
  3. teddy_cli-0.1.17.dev1366/src/teddy_executor/adapters/outbound/local_repo_tree_generator.py +81 -0
  4. teddy_cli-0.1.17.dev1363/src/teddy_executor/adapters/outbound/local_repo_tree_generator.py +0 -96
  5. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/.gitignore +0 -0
  6. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/LICENSE +0 -0
  7. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/README.md +0 -0
  8. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/__init__.py +0 -0
  9. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/__main__.py +0 -0
  10. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/adapters/__init__.py +0 -0
  11. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/adapters/inbound/__init__.py +0 -0
  12. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/adapters/inbound/cli_formatter.py +0 -0
  13. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/adapters/inbound/cli_helpers.py +0 -0
  14. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/adapters/inbound/session_cli_handlers.py +0 -0
  15. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/adapters/inbound/textual_plan_reviewer.py +0 -0
  16. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_app.py +0 -0
  17. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_editor.py +0 -0
  18. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_execution.py +0 -0
  19. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_helpers.py +0 -0
  20. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_logic.py +0 -0
  21. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_previews.py +0 -0
  22. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_widgets.py +0 -0
  23. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/adapters/outbound/__init__.py +0 -0
  24. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/adapters/outbound/console_interactor.py +0 -0
  25. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/adapters/outbound/console_interactor_ask_loop.py +0 -0
  26. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/adapters/outbound/console_interactor_helpers.py +0 -0
  27. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/adapters/outbound/console_tooling.py +0 -0
  28. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/adapters/outbound/filesystem_helpers.py +0 -0
  29. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/adapters/outbound/litellm_adapter.py +0 -0
  30. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/adapters/outbound/local_file_system_adapter.py +0 -0
  31. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/adapters/outbound/openrouter_hydrator.py +0 -0
  32. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/adapters/outbound/shell_adapter.py +0 -0
  33. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/adapters/outbound/shell_command_builder.py +0 -0
  34. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/adapters/outbound/suppressed_logging.py +0 -0
  35. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/adapters/outbound/system_environment_adapter.py +0 -0
  36. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/adapters/outbound/system_environment_inspector.py +0 -0
  37. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/adapters/outbound/system_time_adapter.py +0 -0
  38. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/adapters/outbound/terminal_quit_key_listener.py +0 -0
  39. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/adapters/outbound/web_scraper_adapter.py +0 -0
  40. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/adapters/outbound/web_searcher_adapter.py +0 -0
  41. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/adapters/outbound/yaml_config_adapter.py +0 -0
  42. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/container.py +0 -0
  43. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/__init__.py +0 -0
  44. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/domain/__init__.py +0 -0
  45. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/domain/models/__init__.py +0 -0
  46. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/domain/models/action_ports.py +0 -0
  47. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/domain/models/change_set.py +0 -0
  48. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/domain/models/drift_report.py +0 -0
  49. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/domain/models/exceptions.py +0 -0
  50. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/domain/models/execution_report.py +0 -0
  51. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/domain/models/orchestrator_ports.py +0 -0
  52. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/domain/models/plan.py +0 -0
  53. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/domain/models/planning_ports.py +0 -0
  54. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/domain/models/project_context.py +0 -0
  55. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/domain/models/report_assembly_data.py +0 -0
  56. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/domain/models/session.py +0 -0
  57. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/domain/models/shell_output.py +0 -0
  58. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/domain/models/web_search_results.py +0 -0
  59. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/ports/__init__.py +0 -0
  60. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/ports/inbound/__init__.py +0 -0
  61. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/ports/inbound/edit_simulator.py +0 -0
  62. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/ports/inbound/get_context_use_case.py +0 -0
  63. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/ports/inbound/init.py +0 -0
  64. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/ports/inbound/plan_parser.py +0 -0
  65. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/ports/inbound/plan_reviewer.py +0 -0
  66. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/ports/inbound/plan_validator.py +0 -0
  67. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/ports/inbound/planning_use_case.py +0 -0
  68. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/ports/inbound/run_plan_use_case.py +0 -0
  69. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/ports/outbound/__init__.py +0 -0
  70. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/ports/outbound/config_service.py +0 -0
  71. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/ports/outbound/environment_inspector.py +0 -0
  72. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/ports/outbound/execution_report_assembler.py +0 -0
  73. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/ports/outbound/file_system_manager.py +0 -0
  74. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/ports/outbound/llm_client.py +0 -0
  75. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/ports/outbound/markdown_report_formatter.py +0 -0
  76. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/ports/outbound/prompt_manager.py +0 -0
  77. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/ports/outbound/quit_key_listener.py +0 -0
  78. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/ports/outbound/repo_tree_generator.py +0 -0
  79. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/ports/outbound/session_loop_guard.py +0 -0
  80. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/ports/outbound/session_manager.py +0 -0
  81. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/ports/outbound/session_repository.py +0 -0
  82. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/ports/outbound/shell_executor.py +0 -0
  83. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/ports/outbound/system_environment.py +0 -0
  84. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/ports/outbound/time_service.py +0 -0
  85. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/ports/outbound/user_interactor.py +0 -0
  86. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/ports/outbound/web_scraper.py +0 -0
  87. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/ports/outbound/web_searcher.py +0 -0
  88. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/services/__init__.py +0 -0
  89. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/services/action_changeset_builder.py +0 -0
  90. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/services/action_diff_manager.py +0 -0
  91. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/services/action_dispatcher.py +0 -0
  92. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/services/action_executor.py +0 -0
  93. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/services/action_factory.py +0 -0
  94. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/services/action_parser_complex.py +0 -0
  95. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/services/action_parser_strategies.py +0 -0
  96. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/services/context_service.py +0 -0
  97. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/services/edit_simulator.py +0 -0
  98. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/services/execution_orchestrator.py +0 -0
  99. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/services/execution_report_assembler.py +0 -0
  100. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/services/init_service.py +0 -0
  101. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/services/markdown_plan_parser.py +0 -0
  102. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/services/markdown_report_formatter.py +0 -0
  103. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/services/parser_infrastructure.py +0 -0
  104. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/services/parser_metadata.py +0 -0
  105. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/services/parser_reporting.py +0 -0
  106. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/services/plan_validator.py +0 -0
  107. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/services/planning_service.py +0 -0
  108. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/services/prompt_manager.py +0 -0
  109. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/services/session_lifecycle_manager.py +0 -0
  110. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/services/session_loop_guard.py +0 -0
  111. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/services/session_orchestrator.py +0 -0
  112. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/services/session_planner.py +0 -0
  113. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/services/session_pruning_service.py +0 -0
  114. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/services/session_replanner.py +0 -0
  115. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/services/session_repository.py +0 -0
  116. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/services/session_service.py +0 -0
  117. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/services/templates/execution_report.md.j2 +0 -0
  118. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/services/update_checker.py +0 -0
  119. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/services/validation_rules/__init__.py +0 -0
  120. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/services/validation_rules/edit.py +0 -0
  121. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/services/validation_rules/edit_matcher.py +0 -0
  122. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/services/validation_rules/edit_matcher_heuristics.py +0 -0
  123. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/services/validation_rules/execute.py +0 -0
  124. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/services/validation_rules/filesystem.py +0 -0
  125. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/services/validation_rules/helpers.py +0 -0
  126. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/services/validation_rules/message.py +0 -0
  127. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/utils/__init__.py +0 -0
  128. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/utils/diff.py +0 -0
  129. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/utils/interrupt_guard.py +0 -0
  130. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/utils/io.py +0 -0
  131. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/utils/markdown.py +0 -0
  132. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/utils/paths.py +0 -0
  133. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/utils/serialization.py +0 -0
  134. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/utils/session_notices.py +0 -0
  135. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/utils/stdin_ownership.py +0 -0
  136. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/utils/string.py +0 -0
  137. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/core/utils/terminal.py +0 -0
  138. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/prompts.py +0 -0
  139. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/registries/__init__.py +0 -0
  140. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/registries/infrastructure.py +0 -0
  141. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/registries/reviewer.py +0 -0
  142. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/registries/validators.py +0 -0
  143. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/resources/MRP.md +0 -0
  144. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/resources/__init__.py +0 -0
  145. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/resources/config/__init__.py +0 -0
  146. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/resources/config/config.yaml +0 -0
  147. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/resources/config/init.context +0 -0
  148. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/resources/config/prompts/architect.md +0 -0
  149. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/resources/config/prompts/assistant.md +0 -0
  150. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/resources/config/prompts/debugger.md +0 -0
  151. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/resources/config/prompts/developer.md +0 -0
  152. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/resources/config/prompts/pathfinder.md +0 -0
  153. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/resources/config/prompts/prototyper.md +0 -0
  154. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/resources/templates/ARCHITECTURE.md +0 -0
  155. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/resources/templates/PROJECT.md +0 -0
  156. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/resources/templates/case-file.md +0 -0
  157. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/resources/templates/ci.md +0 -0
  158. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/resources/templates/component-design.md +0 -0
  159. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/resources/templates/makefile.md +0 -0
  160. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/resources/templates/milestone.md +0 -0
  161. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/resources/templates/pre-commit.md +0 -0
  162. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/resources/templates/specification-document.md +0 -0
  163. {teddy_cli-0.1.17.dev1363 → teddy_cli-0.1.17.dev1366}/src/teddy_executor/resources/templates/vertical-slice.md +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: teddy-cli
3
- Version: 0.1.17.dev1363
3
+ Version: 0.1.17.dev1366
4
4
  Summary: The local-first, test-driven agentic engineering harness. Because you should own the means of development.
5
5
  Author: Raphael Atteritano
6
6
  License: AGPL-3.0-only
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "teddy-cli"
3
- version = "0.1.17.dev1363"
3
+ version = "0.1.17.dev1366"
4
4
  description = "The local-first, test-driven agentic engineering harness. Because you should own the means of development."
5
5
  readme = "README.md"
6
6
  keywords = [
@@ -115,6 +115,8 @@ norecursedirs = "spikes"
115
115
  addopts = [
116
116
  "-n",
117
117
  "auto",
118
+ "--dist",
119
+ "worksteal",
118
120
  "--import-mode=importlib",
119
121
  "--timeout=5",
120
122
  ]
@@ -0,0 +1,81 @@
1
+ import logging
2
+ import os
3
+ from pathlib import Path
4
+ from teddy_executor.core.ports.outbound.repo_tree_generator import IRepoTreeGenerator
5
+
6
+ logger = logging.getLogger(__name__)
7
+
8
+
9
+ class LocalRepoTreeGenerator(IRepoTreeGenerator):
10
+ """
11
+ An adapter that generates a file tree for the local repository,
12
+ respecting .gitignore and .teddyignore rules.
13
+ """
14
+
15
+ def __init__(self, root_dir: str = "."):
16
+ from teddy_executor.adapters.outbound.filesystem_helpers import (
17
+ load_ignore_spec,
18
+ )
19
+
20
+ self.root_dir = Path(root_dir).resolve()
21
+ self.ignore_spec = load_ignore_spec(self.root_dir)
22
+
23
+ def generate_tree(self) -> str:
24
+ """
25
+ Generates a string representation of the file tree in a single pass.
26
+ """
27
+ sections: list[tuple[str, str, list[str]]] = []
28
+ root_names = self._collect_directory(self.root_dir, "", sections)
29
+ # Sections sort by their relative path, and the root resolves to ".",
30
+ # so a top-level name below "." (for example "!important") renders
31
+ # before the root block. The "." key preserves that exact order.
32
+ sections.append((".", "", root_names))
33
+ sections.sort(key=lambda item: item[0])
34
+
35
+ rendered: list[str] = []
36
+ for _sort_key, relative_path, names in sections:
37
+ if not names:
38
+ continue
39
+ if relative_path:
40
+ rendered.append("\n".join([f"./{relative_path}:"] + names))
41
+ else:
42
+ rendered.append("\n".join(names))
43
+ return "\n\n".join(rendered)
44
+
45
+ def _collect_directory(
46
+ self,
47
+ directory: str | Path,
48
+ relative_path: str,
49
+ sections: list[tuple[str, str, list[str]]],
50
+ ) -> list[str]:
51
+ """
52
+ Collects one directory's visible names and recurses into its children.
53
+
54
+ Directory and symlink flags come from the scan cache, so each entry
55
+ costs no additional stat call. Symlinks are listed as files and are
56
+ never followed, which keeps circular links from recursing.
57
+ """
58
+ names: list[str] = []
59
+ try:
60
+ with os.scandir(directory) as iterator:
61
+ entries = list(iterator)
62
+ except PermissionError:
63
+ logger.debug("Skipping unreadable directory %s", directory, exc_info=True)
64
+ return names
65
+
66
+ for entry in entries:
67
+ is_directory = entry.is_dir(follow_symlinks=False)
68
+ child_path = (
69
+ f"{relative_path}/{entry.name}" if relative_path else entry.name
70
+ )
71
+ match_path = (child_path + "/") if is_directory else child_path
72
+ if self.ignore_spec.match_file(match_path):
73
+ continue
74
+ names.append(entry.name)
75
+ if is_directory:
76
+ child_names = self._collect_directory(entry.path, child_path, sections)
77
+ sort_key = child_path.replace("/", os.sep).lower()
78
+ sections.append((sort_key, child_path, child_names))
79
+
80
+ names.sort(key=str.lower)
81
+ return names
@@ -1,96 +0,0 @@
1
- import os
2
- from pathlib import Path
3
- from teddy_executor.core.ports.outbound.repo_tree_generator import IRepoTreeGenerator
4
-
5
-
6
- class _RecursiveListFormatter:
7
- """
8
- A helper class to format a set of paths into a recursive "ls -R" style list.
9
- """
10
-
11
- def __init__(self, root_dir: Path, included_paths: set[Path]):
12
- self.root_dir = root_dir
13
- self.included_paths = included_paths
14
-
15
- def format(self) -> str:
16
- """Generates the recursive list string."""
17
- sections: list[str] = []
18
- # Gather all directories that are included (including root)
19
- directories = sorted(
20
- [p for p in self.included_paths if p.is_dir() and not p.is_symlink()]
21
- + [self.root_dir],
22
- key=lambda p: str(p.relative_to(self.root_dir)).lower(),
23
- )
24
-
25
- for directory in directories:
26
- section_content = self._format_section(directory)
27
- if section_content:
28
- sections.append(section_content)
29
-
30
- return "\n\n".join(sections)
31
-
32
- def _format_section(self, directory: Path) -> str:
33
- """Formats a single directory section."""
34
- children = sorted(
35
- [p for p in directory.iterdir() if p in self.included_paths],
36
- key=lambda p: p.name.lower(),
37
- )
38
-
39
- if not children:
40
- return ""
41
-
42
- lines = []
43
- if directory != self.root_dir:
44
- rel_path = directory.relative_to(self.root_dir)
45
- # Poka-Yoke: Always use forward slashes for the tree protocol
46
- posix_rel_path = str(rel_path).replace(os.sep, "/")
47
- lines.append(f"./{posix_rel_path}:")
48
-
49
- for child in children:
50
- lines.append(child.name)
51
-
52
- return "\n".join(lines)
53
-
54
-
55
- class LocalRepoTreeGenerator(IRepoTreeGenerator):
56
- """
57
- An adapter that generates a file tree for the local repository,
58
- respecting .gitignore and .teddyignore rules.
59
- """
60
-
61
- def __init__(self, root_dir: str = "."):
62
- from teddy_executor.adapters.outbound.filesystem_helpers import (
63
- load_ignore_spec,
64
- )
65
-
66
- self.root_dir = Path(root_dir).resolve()
67
- self.ignore_spec = load_ignore_spec(self.root_dir)
68
-
69
- def _get_included_paths(self) -> set[Path]:
70
- """
71
- Walks the directory and returns a set of all files and parent directories
72
- that are not excluded by the ignore spec.
73
- """
74
- from teddy_executor.adapters.outbound.filesystem_helpers import walk_recursive
75
-
76
- included_paths: set[Path] = set()
77
- for entry, _ in walk_recursive(self.root_dir, self.root_dir, self.ignore_spec):
78
- # If not ignored, add to set
79
- included_paths.add(entry)
80
-
81
- # Ensure parent connectivity
82
- for parent in entry.parents:
83
- if parent == self.root_dir:
84
- break
85
- included_paths.add(parent)
86
-
87
- return included_paths
88
-
89
- def generate_tree(self) -> str:
90
- """
91
- Generates a string representation of the file tree by gathering paths
92
- and then delegating to a formatter.
93
- """
94
- included_paths = self._get_included_paths()
95
- formatter = _RecursiveListFormatter(self.root_dir, included_paths)
96
- return formatter.format()