teddy-cli 0.1.17.dev1407__tar.gz → 0.1.17.dev1408__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.dev1407 → teddy_cli-0.1.17.dev1408}/PKG-INFO +1 -1
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/pyproject.toml +1 -1
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/__main__.py +4 -1
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/adapters/outbound/local_repo_tree_generator.py +48 -23
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/domain/models/config_schema.py +3 -1
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/ports/outbound/repo_tree_generator.py +10 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/services/context_service.py +9 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/registries/infrastructure.py +5 -1
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/resources/config/config.yaml +2 -1
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/.gitignore +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/LICENSE +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/README.md +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/adapters/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/adapters/inbound/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/adapters/inbound/cli_formatter.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/adapters/inbound/cli_helpers.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/adapters/inbound/session_cli_handlers.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/adapters/inbound/textual_plan_reviewer.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_app.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_editor.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_execution.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_helpers.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_logic.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_previews.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_widgets.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/adapters/outbound/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/adapters/outbound/console_interactor.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/adapters/outbound/console_interactor_ask_loop.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/adapters/outbound/console_interactor_helpers.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/adapters/outbound/console_tooling.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/adapters/outbound/filesystem_helpers.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/adapters/outbound/litellm_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/adapters/outbound/local_file_system_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/adapters/outbound/openrouter_hydrator.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/adapters/outbound/shell_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/adapters/outbound/shell_command_builder.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/adapters/outbound/suppressed_logging.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/adapters/outbound/system_environment_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/adapters/outbound/system_environment_inspector.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/adapters/outbound/system_time_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/adapters/outbound/terminal_quit_key_listener.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/adapters/outbound/web_scraper_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/adapters/outbound/web_searcher_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/adapters/outbound/yaml_config_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/container.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/domain/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/domain/models/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/domain/models/action_ports.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/domain/models/change_set.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/domain/models/drift_report.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/domain/models/exceptions.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/domain/models/execution_report.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/domain/models/orchestrator_ports.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/domain/models/plan.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/domain/models/planning_ports.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/domain/models/project_context.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/domain/models/report_assembly_data.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/domain/models/session.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/domain/models/shell_output.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/domain/models/web_search_results.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/ports/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/ports/inbound/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/ports/inbound/edit_simulator.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/ports/inbound/get_context_use_case.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/ports/inbound/init.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/ports/inbound/plan_parser.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/ports/inbound/plan_reviewer.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/ports/inbound/plan_validator.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/ports/inbound/planning_use_case.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/ports/inbound/run_plan_use_case.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/ports/outbound/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/ports/outbound/config_service.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/ports/outbound/environment_inspector.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/ports/outbound/execution_report_assembler.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/ports/outbound/file_system_manager.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/ports/outbound/llm_client.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/ports/outbound/markdown_report_formatter.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/ports/outbound/prompt_manager.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/ports/outbound/quit_key_listener.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/ports/outbound/session_loop_guard.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/ports/outbound/session_manager.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/ports/outbound/session_repository.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/ports/outbound/shell_executor.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/ports/outbound/system_environment.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/ports/outbound/time_service.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/ports/outbound/user_interactor.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/ports/outbound/web_scraper.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/ports/outbound/web_searcher.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/services/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/services/action_changeset_builder.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/services/action_diff_manager.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/services/action_dispatcher.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/services/action_executor.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/services/action_factory.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/services/action_parser_complex.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/services/action_parser_strategies.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/services/edit_simulator.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/services/execution_orchestrator.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/services/execution_report_assembler.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/services/init_service.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/services/markdown_plan_parser.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/services/markdown_report_formatter.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/services/parser_infrastructure.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/services/parser_metadata.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/services/parser_reporting.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/services/plan_validator.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/services/planning_service.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/services/prompt_manager.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/services/session_lifecycle_manager.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/services/session_loop_guard.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/services/session_orchestrator.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/services/session_planner.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/services/session_pruning_service.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/services/session_replanner.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/services/session_repository.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/services/session_service.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/services/templates/execution_report.md.j2 +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/services/update_checker.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/services/validation_rules/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/services/validation_rules/edit.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/services/validation_rules/edit_matcher.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/services/validation_rules/edit_matcher_heuristics.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/services/validation_rules/execute.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/services/validation_rules/filesystem.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/services/validation_rules/helpers.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/services/validation_rules/message.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/utils/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/utils/diff.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/utils/editor_names.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/utils/interrupt_guard.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/utils/interruptible_call.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/utils/io.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/utils/markdown.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/utils/paths.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/utils/serialization.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/utils/session_notices.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/utils/stdin_ownership.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/utils/string.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/utils/terminal.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/prompts.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/registries/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/registries/reviewer.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/registries/validators.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/resources/MRP.md +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/resources/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/resources/config/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/resources/config/init.context +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/resources/config/prompts/architect.md +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/resources/config/prompts/assistant.md +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/resources/config/prompts/debugger.md +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/resources/config/prompts/developer.md +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/resources/config/prompts/pathfinder.md +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/resources/config/prompts/prototyper.md +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/resources/templates/ARCHITECTURE.md +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/resources/templates/PROJECT.md +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/resources/templates/case-file.md +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/resources/templates/ci.md +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/resources/templates/component-design.md +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/resources/templates/makefile.md +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/resources/templates/milestone.md +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/resources/templates/pre-commit.md +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/resources/templates/specification-document.md +0 -0
- {teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/resources/templates/vertical-slice.md +0 -0
|
@@ -194,7 +194,10 @@ def _ensure_project_initialized(container, root_dir: str | None = None) -> None:
|
|
|
194
194
|
factory=lambda: LocalRepoTreeGenerator(
|
|
195
195
|
root_dir=root,
|
|
196
196
|
max_depth=c.resolve(IConfigService).get_setting(
|
|
197
|
-
"context.max_tree_depth",
|
|
197
|
+
"context.max_tree_depth", 3
|
|
198
|
+
),
|
|
199
|
+
max_tree_width=c.resolve(IConfigService).get_setting(
|
|
200
|
+
"context.max_tree_width", 20
|
|
198
201
|
),
|
|
199
202
|
),
|
|
200
203
|
scope=Scope.transient,
|
|
@@ -6,7 +6,7 @@ from teddy_executor.core.ports.outbound.repo_tree_generator import IRepoTreeGene
|
|
|
6
6
|
|
|
7
7
|
logger = logging.getLogger(__name__)
|
|
8
8
|
|
|
9
|
-
UNREADABLE_MARKER = "[
|
|
9
|
+
UNREADABLE_MARKER = "[unreadable]"
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
class LocalRepoTreeGenerator(IRepoTreeGenerator):
|
|
@@ -19,22 +19,37 @@ class LocalRepoTreeGenerator(IRepoTreeGenerator):
|
|
|
19
19
|
self,
|
|
20
20
|
root_dir: str = ".",
|
|
21
21
|
max_depth: int = DEFAULT_APP_CONFIG.context.max_tree_depth,
|
|
22
|
+
max_tree_width: int = DEFAULT_APP_CONFIG.context.max_tree_width,
|
|
22
23
|
):
|
|
23
24
|
from teddy_executor.adapters.outbound.filesystem_helpers import (
|
|
24
25
|
load_ignore_spec,
|
|
25
26
|
)
|
|
26
27
|
|
|
27
28
|
assert max_depth >= 0, f"max_depth must be non-negative, got {max_depth}"
|
|
29
|
+
assert max_tree_width >= 1, (
|
|
30
|
+
f"max_tree_width must be positive, got {max_tree_width}"
|
|
31
|
+
)
|
|
28
32
|
self.root_dir = Path(root_dir).resolve()
|
|
29
33
|
self.ignore_spec = load_ignore_spec(self.root_dir)
|
|
30
34
|
self._max_depth = max_depth
|
|
35
|
+
self._max_tree_width = max_tree_width
|
|
36
|
+
|
|
37
|
+
@property
|
|
38
|
+
def max_depth(self) -> int:
|
|
39
|
+
"""The configured maximum directory nesting depth."""
|
|
40
|
+
return self._max_depth
|
|
41
|
+
|
|
42
|
+
@property
|
|
43
|
+
def max_tree_width(self) -> int:
|
|
44
|
+
"""The configured maximum visible entries per non-root directory."""
|
|
45
|
+
return self._max_tree_width
|
|
31
46
|
|
|
32
47
|
def generate_tree(self) -> str:
|
|
33
48
|
"""
|
|
34
49
|
Generates a string representation of the file tree in a single pass.
|
|
35
50
|
"""
|
|
36
51
|
sections: list[tuple[str, str, list[str]]] = []
|
|
37
|
-
root_names = self._collect_directory(self.root_dir, "", sections)
|
|
52
|
+
root_names = self._collect_directory(self.root_dir, "", sections, is_root=True)
|
|
38
53
|
# Sections sort by their relative path, and the root resolves to ".",
|
|
39
54
|
# so a top-level name below "." (for example "!important") renders
|
|
40
55
|
# before the root block. The "." key preserves that exact order.
|
|
@@ -57,26 +72,34 @@ class LocalRepoTreeGenerator(IRepoTreeGenerator):
|
|
|
57
72
|
relative_path: str,
|
|
58
73
|
sections: list[tuple[str, str, list[str]]],
|
|
59
74
|
depth: int = 0,
|
|
75
|
+
is_root: bool = False,
|
|
60
76
|
) -> list[str]:
|
|
61
77
|
"""
|
|
62
78
|
Collects one directory's visible names and recurses into its children.
|
|
63
79
|
|
|
64
|
-
A directory at or beyond the configured
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
80
|
+
One scan supplies both limits. A directory at or beyond the configured
|
|
81
|
+
depth limit renders one compact count notice instead of expanding, so
|
|
82
|
+
truncation is never silent. A non-root directory holding more visible
|
|
83
|
+
entries than the width cap renders the same notice and withholds its
|
|
84
|
+
descendants, because names without their parent folder cannot be
|
|
85
|
+
mapped. The project root is exempt from the width cap, because it is
|
|
86
|
+
the only place where a top-level file is named. An unreadable directory
|
|
87
|
+
renders an explicit marker rather than an empty section, so it never
|
|
88
|
+
looks like a readable empty directory. Directory and symlink flags come
|
|
89
|
+
from the scan cache, so each entry costs no additional stat call.
|
|
90
|
+
Symlinks are listed as files and are never followed, which keeps
|
|
91
|
+
circular links from recursing.
|
|
71
92
|
"""
|
|
72
93
|
if depth >= self._max_depth:
|
|
73
|
-
|
|
74
|
-
return [marker] if marker else []
|
|
94
|
+
return self._omission_notice(directory, relative_path)
|
|
75
95
|
|
|
76
96
|
entries = self._scan_visible_entries(directory, relative_path)
|
|
77
97
|
if entries is None:
|
|
78
98
|
return [UNREADABLE_MARKER]
|
|
79
99
|
|
|
100
|
+
if not is_root and len(entries) > self._max_tree_width:
|
|
101
|
+
return [self._compact_notice(entries)]
|
|
102
|
+
|
|
80
103
|
names: list[str] = []
|
|
81
104
|
for entry, is_directory, child_path in entries:
|
|
82
105
|
names.append(entry.name)
|
|
@@ -119,25 +142,27 @@ class LocalRepoTreeGenerator(IRepoTreeGenerator):
|
|
|
119
142
|
visible.append((entry, is_directory, child_path))
|
|
120
143
|
return visible
|
|
121
144
|
|
|
122
|
-
def
|
|
145
|
+
def _omission_notice(self, directory: str | Path, relative_path: str) -> list[str]:
|
|
123
146
|
"""
|
|
124
|
-
Renders the
|
|
147
|
+
Renders the compact notice for a directory at the depth limit.
|
|
125
148
|
|
|
126
149
|
Counts only the visible immediate children after ignore rules. An
|
|
127
|
-
unreadable directory renders the unreadable marker instead
|
|
128
|
-
|
|
129
|
-
|
|
150
|
+
unreadable directory renders the unreadable marker instead, and a
|
|
151
|
+
directory with no visible child renders nothing, so a genuinely empty
|
|
152
|
+
directory is not shown as an omission.
|
|
130
153
|
"""
|
|
131
154
|
entries = self._scan_visible_entries(directory, relative_path)
|
|
132
155
|
if entries is None:
|
|
133
|
-
return UNREADABLE_MARKER
|
|
156
|
+
return [UNREADABLE_MARKER]
|
|
157
|
+
if not entries:
|
|
158
|
+
return []
|
|
159
|
+
return [self._compact_notice(entries)]
|
|
160
|
+
|
|
161
|
+
@staticmethod
|
|
162
|
+
def _compact_notice(entries: list[tuple[os.DirEntry, bool, str]]) -> str:
|
|
163
|
+
"""Render the compact ``[X folders, Y files]`` notice for ``entries``."""
|
|
134
164
|
folders = sum(1 for _entry, is_directory, _path in entries if is_directory)
|
|
135
165
|
files = len(entries) - folders
|
|
136
|
-
if not folders and not files:
|
|
137
|
-
return ""
|
|
138
166
|
folder_noun = "folder" if folders == 1 else "folders"
|
|
139
167
|
file_noun = "file" if files == 1 else "files"
|
|
140
|
-
return
|
|
141
|
-
f"[... directory not expanded (depth limit {self._max_depth}): "
|
|
142
|
-
f"{folders} {folder_noun}, {files} {file_noun}]"
|
|
143
|
-
)
|
|
168
|
+
return f"[{folders} {folder_noun}, {files} {file_noun}]"
|
|
@@ -44,7 +44,8 @@ class ReadConfig:
|
|
|
44
44
|
|
|
45
45
|
@dataclass(frozen=True)
|
|
46
46
|
class ContextConfig:
|
|
47
|
-
max_tree_depth: int =
|
|
47
|
+
max_tree_depth: int = 3
|
|
48
|
+
max_tree_width: int = 20
|
|
48
49
|
|
|
49
50
|
|
|
50
51
|
@dataclass(frozen=True)
|
|
@@ -211,6 +212,7 @@ _SCHEMA_FIELDS: tuple[_FieldSpec, ...] = (
|
|
|
211
212
|
_FieldSpec("workspace.pull", "workspace", "pull", bool),
|
|
212
213
|
_FieldSpec("read.max_lines", "read", "max_lines", int, minimum=1),
|
|
213
214
|
_FieldSpec("context.max_tree_depth", "context", "max_tree_depth", int, minimum=0),
|
|
215
|
+
_FieldSpec("context.max_tree_width", "context", "max_tree_width", int, minimum=1),
|
|
214
216
|
_FieldSpec("research.max_results", "research", "max_results", int, minimum=1),
|
|
215
217
|
_FieldSpec("checks.prompts", "checks", "prompts", bool),
|
|
216
218
|
_FieldSpec("checks.templates", "checks", "templates", bool),
|
|
@@ -6,6 +6,16 @@ class IRepoTreeGenerator(Protocol):
|
|
|
6
6
|
Outbound Port for generating a repository file tree.
|
|
7
7
|
"""
|
|
8
8
|
|
|
9
|
+
@property
|
|
10
|
+
def max_depth(self) -> int:
|
|
11
|
+
"""The maximum directory nesting depth rendered in the tree."""
|
|
12
|
+
...
|
|
13
|
+
|
|
14
|
+
@property
|
|
15
|
+
def max_tree_width(self) -> int:
|
|
16
|
+
"""The maximum visible entries listed for a non-root directory."""
|
|
17
|
+
...
|
|
18
|
+
|
|
9
19
|
def generate_tree(self) -> str:
|
|
10
20
|
"""
|
|
11
21
|
Generates a string representation of the file tree,
|
|
@@ -371,6 +371,7 @@ class ContextService(IGetContextUseCase):
|
|
|
371
371
|
"\n## Git Status",
|
|
372
372
|
git_status_body,
|
|
373
373
|
"\n## Project Structure",
|
|
374
|
+
self._format_tree_subtitle(),
|
|
374
375
|
f"```\n{repo_tree}\n```",
|
|
375
376
|
]
|
|
376
377
|
|
|
@@ -388,6 +389,14 @@ class ContextService(IGetContextUseCase):
|
|
|
388
389
|
|
|
389
390
|
return "\n".join(content_parts)
|
|
390
391
|
|
|
392
|
+
def _format_tree_subtitle(self) -> str:
|
|
393
|
+
"""State both tree limits once, so the compact notices stay meaningful."""
|
|
394
|
+
return (
|
|
395
|
+
f"*Tree capped at depth {self._repo_tree_generator.max_depth} "
|
|
396
|
+
f"and width {self._repo_tree_generator.max_tree_width}: "
|
|
397
|
+
"truncated directories show counts only.*"
|
|
398
|
+
)
|
|
399
|
+
|
|
391
400
|
def _format_workspace_contents(
|
|
392
401
|
self,
|
|
393
402
|
workspace_paths: List[str],
|
|
@@ -148,7 +148,11 @@ def register_infrastructure(container: punq.Container) -> None:
|
|
|
148
148
|
factory=lambda: LocalRepoTreeGenerator(
|
|
149
149
|
max_depth=container.resolve(IConfigService).get_setting(
|
|
150
150
|
"context.max_tree_depth", DEFAULT_APP_CONFIG.context.max_tree_depth
|
|
151
|
-
)
|
|
151
|
+
),
|
|
152
|
+
max_tree_width=container.resolve(IConfigService).get_setting(
|
|
153
|
+
"context.max_tree_width",
|
|
154
|
+
DEFAULT_APP_CONFIG.context.max_tree_width,
|
|
155
|
+
),
|
|
152
156
|
),
|
|
153
157
|
scope=punq.Scope.transient,
|
|
154
158
|
)
|
|
@@ -18,7 +18,8 @@ read:
|
|
|
18
18
|
max_lines: 1000 # Caps READ action output lines.
|
|
19
19
|
|
|
20
20
|
context:
|
|
21
|
-
max_tree_depth:
|
|
21
|
+
max_tree_depth: 3 # Max project tree depth.
|
|
22
|
+
max_tree_width: 20 # Max entries listed per directory.
|
|
22
23
|
|
|
23
24
|
research:
|
|
24
25
|
max_results: 5 # Number of search results to fetch and scrape.
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/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.dev1407 → teddy_cli-0.1.17.dev1408}/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.dev1407 → teddy_cli-0.1.17.dev1408}/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.dev1407 → teddy_cli-0.1.17.dev1408}/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.dev1407 → teddy_cli-0.1.17.dev1408}/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
|
{teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/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
|
{teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/utils/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/utils/editor_names.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/utils/markdown.py
RENAMED
|
File without changes
|
{teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/utils/paths.py
RENAMED
|
File without changes
|
{teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/utils/serialization.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/utils/string.py
RENAMED
|
File without changes
|
{teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/core/utils/terminal.py
RENAMED
|
File without changes
|
|
File without changes
|
{teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/registries/__init__.py
RENAMED
|
File without changes
|
{teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/registries/reviewer.py
RENAMED
|
File without changes
|
{teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/src/teddy_executor/registries/validators.py
RENAMED
|
File without changes
|
|
File without changes
|
{teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/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
|
{teddy_cli-0.1.17.dev1407 → teddy_cli-0.1.17.dev1408}/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
|