teddy-cli 0.1.17.dev1362__tar.gz → 0.1.17.dev1365__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.
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/PKG-INFO +1 -1
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/pyproject.toml +3 -1
- teddy_cli-0.1.17.dev1365/src/teddy_executor/adapters/outbound/local_repo_tree_generator.py +81 -0
- teddy_cli-0.1.17.dev1362/src/teddy_executor/adapters/outbound/local_repo_tree_generator.py +0 -96
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/.gitignore +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/LICENSE +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/README.md +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/__main__.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/adapters/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/adapters/inbound/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/adapters/inbound/cli_formatter.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/adapters/inbound/cli_helpers.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/adapters/inbound/session_cli_handlers.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/adapters/inbound/textual_plan_reviewer.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_app.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_editor.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_execution.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_helpers.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_logic.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_previews.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_widgets.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/adapters/outbound/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/adapters/outbound/console_interactor.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/adapters/outbound/console_interactor_ask_loop.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/adapters/outbound/console_interactor_helpers.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/adapters/outbound/console_tooling.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/adapters/outbound/filesystem_helpers.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/adapters/outbound/litellm_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/adapters/outbound/local_file_system_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/adapters/outbound/openrouter_hydrator.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/adapters/outbound/shell_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/adapters/outbound/shell_command_builder.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/adapters/outbound/suppressed_logging.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/adapters/outbound/system_environment_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/adapters/outbound/system_environment_inspector.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/adapters/outbound/system_time_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/adapters/outbound/terminal_quit_key_listener.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/adapters/outbound/web_scraper_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/adapters/outbound/web_searcher_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/adapters/outbound/yaml_config_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/container.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/domain/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/domain/models/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/domain/models/action_ports.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/domain/models/change_set.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/domain/models/drift_report.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/domain/models/exceptions.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/domain/models/execution_report.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/domain/models/orchestrator_ports.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/domain/models/plan.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/domain/models/planning_ports.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/domain/models/project_context.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/domain/models/report_assembly_data.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/domain/models/session.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/domain/models/shell_output.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/domain/models/web_search_results.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/ports/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/ports/inbound/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/ports/inbound/edit_simulator.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/ports/inbound/get_context_use_case.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/ports/inbound/init.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/ports/inbound/plan_parser.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/ports/inbound/plan_reviewer.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/ports/inbound/plan_validator.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/ports/inbound/planning_use_case.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/ports/inbound/run_plan_use_case.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/ports/outbound/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/ports/outbound/config_service.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/ports/outbound/environment_inspector.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/ports/outbound/execution_report_assembler.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/ports/outbound/file_system_manager.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/ports/outbound/llm_client.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/ports/outbound/markdown_report_formatter.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/ports/outbound/prompt_manager.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/ports/outbound/quit_key_listener.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/ports/outbound/repo_tree_generator.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/ports/outbound/session_loop_guard.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/ports/outbound/session_manager.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/ports/outbound/session_repository.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/ports/outbound/shell_executor.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/ports/outbound/system_environment.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/ports/outbound/time_service.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/ports/outbound/user_interactor.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/ports/outbound/web_scraper.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/ports/outbound/web_searcher.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/services/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/services/action_changeset_builder.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/services/action_diff_manager.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/services/action_dispatcher.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/services/action_executor.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/services/action_factory.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/services/action_parser_complex.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/services/action_parser_strategies.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/services/context_service.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/services/edit_simulator.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/services/execution_orchestrator.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/services/execution_report_assembler.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/services/init_service.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/services/markdown_plan_parser.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/services/markdown_report_formatter.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/services/parser_infrastructure.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/services/parser_metadata.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/services/parser_reporting.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/services/plan_validator.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/services/planning_service.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/services/prompt_manager.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/services/session_lifecycle_manager.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/services/session_loop_guard.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/services/session_orchestrator.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/services/session_planner.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/services/session_pruning_service.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/services/session_replanner.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/services/session_repository.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/services/session_service.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/services/templates/execution_report.md.j2 +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/services/update_checker.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/services/validation_rules/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/services/validation_rules/edit.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/services/validation_rules/edit_matcher.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/services/validation_rules/edit_matcher_heuristics.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/services/validation_rules/execute.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/services/validation_rules/filesystem.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/services/validation_rules/helpers.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/services/validation_rules/message.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/utils/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/utils/diff.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/utils/interrupt_guard.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/utils/io.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/utils/markdown.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/utils/paths.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/utils/serialization.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/utils/session_notices.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/utils/stdin_ownership.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/utils/string.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/utils/terminal.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/prompts.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/registries/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/registries/infrastructure.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/registries/reviewer.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/registries/validators.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/resources/MRP.md +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/resources/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/resources/config/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/resources/config/config.yaml +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/resources/config/init.context +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/resources/config/prompts/architect.md +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/resources/config/prompts/assistant.md +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/resources/config/prompts/debugger.md +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/resources/config/prompts/developer.md +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/resources/config/prompts/pathfinder.md +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/resources/config/prompts/prototyper.md +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/resources/templates/ARCHITECTURE.md +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/resources/templates/PROJECT.md +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/resources/templates/case-file.md +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/resources/templates/ci.md +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/resources/templates/component-design.md +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/resources/templates/makefile.md +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/resources/templates/milestone.md +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/resources/templates/pre-commit.md +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/resources/templates/specification-document.md +0 -0
- {teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/resources/templates/vertical-slice.md +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "teddy-cli"
|
|
3
|
-
version = "0.1.17.
|
|
3
|
+
version = "0.1.17.dev1365"
|
|
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()
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/adapters/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/domain/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/domain/models/plan.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/ports/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/ports/inbound/init.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/services/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/utils/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/utils/markdown.py
RENAMED
|
File without changes
|
{teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/utils/paths.py
RENAMED
|
File without changes
|
{teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/utils/serialization.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/utils/string.py
RENAMED
|
File without changes
|
{teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/core/utils/terminal.py
RENAMED
|
File without changes
|
|
File without changes
|
{teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/registries/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/registries/reviewer.py
RENAMED
|
File without changes
|
{teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/registries/validators.py
RENAMED
|
File without changes
|
|
File without changes
|
{teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/resources/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{teddy_cli-0.1.17.dev1362 → teddy_cli-0.1.17.dev1365}/src/teddy_executor/resources/templates/ci.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|