teddy-cli 0.1.17.dev1368__tar.gz → 0.1.17.dev1370__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.dev1368 → teddy_cli-0.1.17.dev1370}/PKG-INFO +1 -1
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/pyproject.toml +1 -1
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/adapters/inbound/session_cli_handlers.py +12 -4
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/adapters/outbound/shell_adapter.py +51 -11
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/adapters/outbound/system_environment_inspector.py +4 -1
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/.gitignore +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/LICENSE +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/README.md +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/__main__.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/adapters/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/adapters/inbound/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/adapters/inbound/cli_formatter.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/adapters/inbound/cli_helpers.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/adapters/inbound/textual_plan_reviewer.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_app.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_editor.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_execution.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_helpers.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_logic.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_previews.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_widgets.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/adapters/outbound/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/adapters/outbound/console_interactor.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/adapters/outbound/console_interactor_ask_loop.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/adapters/outbound/console_interactor_helpers.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/adapters/outbound/console_tooling.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/adapters/outbound/filesystem_helpers.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/adapters/outbound/litellm_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/adapters/outbound/local_file_system_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/adapters/outbound/local_repo_tree_generator.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/adapters/outbound/openrouter_hydrator.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/adapters/outbound/shell_command_builder.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/adapters/outbound/suppressed_logging.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/adapters/outbound/system_environment_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/adapters/outbound/system_time_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/adapters/outbound/terminal_quit_key_listener.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/adapters/outbound/web_scraper_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/adapters/outbound/web_searcher_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/adapters/outbound/yaml_config_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/container.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/domain/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/domain/models/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/domain/models/action_ports.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/domain/models/change_set.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/domain/models/drift_report.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/domain/models/exceptions.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/domain/models/execution_report.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/domain/models/orchestrator_ports.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/domain/models/plan.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/domain/models/planning_ports.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/domain/models/project_context.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/domain/models/report_assembly_data.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/domain/models/session.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/domain/models/shell_output.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/domain/models/web_search_results.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/ports/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/ports/inbound/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/ports/inbound/edit_simulator.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/ports/inbound/get_context_use_case.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/ports/inbound/init.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/ports/inbound/plan_parser.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/ports/inbound/plan_reviewer.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/ports/inbound/plan_validator.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/ports/inbound/planning_use_case.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/ports/inbound/run_plan_use_case.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/ports/outbound/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/ports/outbound/config_service.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/ports/outbound/environment_inspector.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/ports/outbound/execution_report_assembler.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/ports/outbound/file_system_manager.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/ports/outbound/llm_client.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/ports/outbound/markdown_report_formatter.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/ports/outbound/prompt_manager.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/ports/outbound/quit_key_listener.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/ports/outbound/repo_tree_generator.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/ports/outbound/session_loop_guard.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/ports/outbound/session_manager.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/ports/outbound/session_repository.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/ports/outbound/shell_executor.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/ports/outbound/system_environment.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/ports/outbound/time_service.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/ports/outbound/user_interactor.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/ports/outbound/web_scraper.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/ports/outbound/web_searcher.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/services/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/services/action_changeset_builder.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/services/action_diff_manager.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/services/action_dispatcher.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/services/action_executor.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/services/action_factory.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/services/action_parser_complex.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/services/action_parser_strategies.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/services/context_service.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/services/edit_simulator.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/services/execution_orchestrator.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/services/execution_report_assembler.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/services/init_service.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/services/markdown_plan_parser.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/services/markdown_report_formatter.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/services/parser_infrastructure.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/services/parser_metadata.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/services/parser_reporting.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/services/plan_validator.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/services/planning_service.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/services/prompt_manager.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/services/session_lifecycle_manager.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/services/session_loop_guard.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/services/session_orchestrator.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/services/session_planner.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/services/session_pruning_service.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/services/session_replanner.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/services/session_repository.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/services/session_service.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/services/templates/execution_report.md.j2 +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/services/update_checker.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/services/validation_rules/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/services/validation_rules/edit.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/services/validation_rules/edit_matcher.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/services/validation_rules/edit_matcher_heuristics.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/services/validation_rules/execute.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/services/validation_rules/filesystem.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/services/validation_rules/helpers.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/services/validation_rules/message.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/utils/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/utils/diff.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/utils/interrupt_guard.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/utils/io.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/utils/markdown.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/utils/paths.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/utils/serialization.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/utils/session_notices.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/utils/stdin_ownership.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/utils/string.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/utils/terminal.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/prompts.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/registries/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/registries/infrastructure.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/registries/reviewer.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/registries/validators.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/resources/MRP.md +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/resources/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/resources/config/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/resources/config/config.yaml +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/resources/config/init.context +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/resources/config/prompts/architect.md +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/resources/config/prompts/assistant.md +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/resources/config/prompts/debugger.md +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/resources/config/prompts/developer.md +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/resources/config/prompts/pathfinder.md +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/resources/config/prompts/prototyper.md +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/resources/templates/ARCHITECTURE.md +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/resources/templates/PROJECT.md +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/resources/templates/case-file.md +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/resources/templates/ci.md +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/resources/templates/component-design.md +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/resources/templates/makefile.md +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/resources/templates/milestone.md +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/resources/templates/pre-commit.md +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/resources/templates/specification-document.md +0 -0
- {teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/resources/templates/vertical-slice.md +0 -0
|
@@ -3,7 +3,7 @@ import shutil
|
|
|
3
3
|
import signal
|
|
4
4
|
import subprocess # nosec B404
|
|
5
5
|
from pathlib import Path
|
|
6
|
-
from typing import Any, Dict, Optional, Sequence
|
|
6
|
+
from typing import Any, Callable, Dict, Optional, Sequence
|
|
7
7
|
|
|
8
8
|
import typer
|
|
9
9
|
from punq import Container
|
|
@@ -43,7 +43,9 @@ _HOOK_IMPL_FLAG = "hook-impl"
|
|
|
43
43
|
_HOOK_CONFIG_FLAG = "--config=.pre-commit-config.yaml"
|
|
44
44
|
|
|
45
45
|
|
|
46
|
-
def _resolve_hooks_dir(
|
|
46
|
+
def _resolve_hooks_dir(
|
|
47
|
+
run_func: Optional[Callable[..., Any]] = None,
|
|
48
|
+
) -> Optional[Path]:
|
|
47
49
|
"""Resolve the git hooks directory using git's own answer.
|
|
48
50
|
|
|
49
51
|
Returns None when unresolvable (not a repository, git CLI failure,
|
|
@@ -52,12 +54,18 @@ def _resolve_hooks_dir() -> Optional[Path]:
|
|
|
52
54
|
the same directory `pre-commit install` writes to. Relative output
|
|
53
55
|
is anchored against the current working directory (git semantics).
|
|
54
56
|
"""
|
|
57
|
+
# Explicit decoding keeps a non-UTF-8 path byte from raising mid-read,
|
|
58
|
+
# which the guard would swallow as an unresolvable hooks directory.
|
|
59
|
+
# The runner defaults to subprocess.run at call time, so tests inject
|
|
60
|
+
# a replacement instead of patching the module global.
|
|
61
|
+
runner = run_func or subprocess.run
|
|
55
62
|
try:
|
|
56
|
-
result =
|
|
63
|
+
result = runner( # nosec B603 B607
|
|
57
64
|
["git", "rev-parse", "--git-path", "hooks"],
|
|
58
65
|
check=True,
|
|
59
66
|
capture_output=True,
|
|
60
|
-
|
|
67
|
+
encoding="utf-8",
|
|
68
|
+
errors="replace",
|
|
61
69
|
)
|
|
62
70
|
except (subprocess.CalledProcessError, OSError, ValueError):
|
|
63
71
|
logger.debug("hooks directory resolution failed", exc_info=True)
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import locale
|
|
1
2
|
import os
|
|
2
3
|
import subprocess # nosec
|
|
3
4
|
import sys
|
|
@@ -47,6 +48,27 @@ class ShellAdapter(IShellExecutor):
|
|
|
47
48
|
text = re.sub(r"\x1b\[[0-9;?><\$]*[a-zA-Z]", "", text)
|
|
48
49
|
return text
|
|
49
50
|
|
|
51
|
+
def _decode_stream(self, data: bytes | str | None) -> str:
|
|
52
|
+
"""Decode one captured child stream to text without raising.
|
|
53
|
+
|
|
54
|
+
Text payloads from test doubles pass through untouched. Raw bytes
|
|
55
|
+
decode as UTF-8 first, so identical UTF-8 streams yield identical
|
|
56
|
+
text on every platform. A stream that is not valid UTF-8 falls back
|
|
57
|
+
to the locale codec with replacement, which keeps native Windows
|
|
58
|
+
child output readable and never kills a reader thread.
|
|
59
|
+
Universal-newline normalisation preserves the previous text-mode
|
|
60
|
+
contract.
|
|
61
|
+
"""
|
|
62
|
+
if data is None:
|
|
63
|
+
return ""
|
|
64
|
+
if isinstance(data, str):
|
|
65
|
+
return data
|
|
66
|
+
try:
|
|
67
|
+
decoded = data.decode("utf-8")
|
|
68
|
+
except UnicodeDecodeError:
|
|
69
|
+
decoded = data.decode(locale.getpreferredencoding(False), errors="replace")
|
|
70
|
+
return decoded.replace("\r\n", "\n").replace("\r", "\n")
|
|
71
|
+
|
|
50
72
|
def _validate_cwd(self, cwd: Optional[str]) -> str:
|
|
51
73
|
"""Validates and resolves the working directory."""
|
|
52
74
|
project_root = os.path.realpath(os.getcwd())
|
|
@@ -125,7 +147,9 @@ class ShellAdapter(IShellExecutor):
|
|
|
125
147
|
# Python 3.14.2's C-level initialization. The pipe is closed
|
|
126
148
|
# immediately after Popen so children see EOF on reads.
|
|
127
149
|
"stdin": subprocess.PIPE,
|
|
128
|
-
|
|
150
|
+
# Bytes mode: the pipes are drained undecoded, so no reader
|
|
151
|
+
# thread can die on a codec mismatch. Each stream is decoded
|
|
152
|
+
# explicitly by _decode_stream after the wait.
|
|
129
153
|
"cwd": cwd,
|
|
130
154
|
"env": env,
|
|
131
155
|
}
|
|
@@ -171,9 +195,11 @@ class ShellAdapter(IShellExecutor):
|
|
|
171
195
|
|
|
172
196
|
try:
|
|
173
197
|
# Give the OS a moment to close pipes naturally after SIGKILL.
|
|
174
|
-
|
|
198
|
+
raw_stdout, raw_stderr = process.communicate(timeout=0.5)
|
|
175
199
|
except subprocess.TimeoutExpired:
|
|
176
|
-
|
|
200
|
+
raw_stdout, raw_stderr = "", ""
|
|
201
|
+
stdout = self._decode_stream(raw_stdout)
|
|
202
|
+
stderr = self._decode_stream(raw_stderr)
|
|
177
203
|
|
|
178
204
|
sanitized_stderr = self._sanitize_output(stderr) or ""
|
|
179
205
|
if self._detect_interactive_prompt(sanitized_stderr, stdout):
|
|
@@ -228,8 +254,12 @@ class ShellAdapter(IShellExecutor):
|
|
|
228
254
|
guard = self._interrupt_guard
|
|
229
255
|
if guard is None:
|
|
230
256
|
comm_res = process.communicate(timeout=timeout)
|
|
231
|
-
|
|
232
|
-
return
|
|
257
|
+
raw_stdout, raw_stderr = cast(tuple[bytes | str, bytes | str], comm_res)
|
|
258
|
+
return (
|
|
259
|
+
self._decode_stream(raw_stdout),
|
|
260
|
+
self._decode_stream(raw_stderr),
|
|
261
|
+
False,
|
|
262
|
+
)
|
|
233
263
|
|
|
234
264
|
poll_interval = self._poll_interval_seconds
|
|
235
265
|
deadline = None if timeout is None else time.monotonic() + timeout
|
|
@@ -238,10 +268,16 @@ class ShellAdapter(IShellExecutor):
|
|
|
238
268
|
self._terminate_process_group(process)
|
|
239
269
|
try:
|
|
240
270
|
comm_res = process.communicate(timeout=1.0)
|
|
241
|
-
|
|
271
|
+
raw_stdout, raw_stderr = cast(
|
|
272
|
+
tuple[bytes | str, bytes | str], comm_res
|
|
273
|
+
)
|
|
242
274
|
except subprocess.TimeoutExpired:
|
|
243
|
-
|
|
244
|
-
return
|
|
275
|
+
raw_stdout, raw_stderr = "", ""
|
|
276
|
+
return (
|
|
277
|
+
self._decode_stream(raw_stdout),
|
|
278
|
+
self._decode_stream(raw_stderr),
|
|
279
|
+
True,
|
|
280
|
+
)
|
|
245
281
|
slice_timeout: float = poll_interval
|
|
246
282
|
if deadline is not None:
|
|
247
283
|
remaining = deadline - time.monotonic()
|
|
@@ -250,8 +286,12 @@ class ShellAdapter(IShellExecutor):
|
|
|
250
286
|
slice_timeout = min(poll_interval, remaining)
|
|
251
287
|
try:
|
|
252
288
|
comm_res = process.communicate(timeout=slice_timeout)
|
|
253
|
-
|
|
254
|
-
return
|
|
289
|
+
raw_stdout, raw_stderr = cast(tuple[bytes | str, bytes | str], comm_res)
|
|
290
|
+
return (
|
|
291
|
+
self._decode_stream(raw_stdout),
|
|
292
|
+
self._decode_stream(raw_stderr),
|
|
293
|
+
False,
|
|
294
|
+
)
|
|
255
295
|
except subprocess.TimeoutExpired:
|
|
256
296
|
continue
|
|
257
297
|
|
|
@@ -407,7 +447,7 @@ class ShellAdapter(IShellExecutor):
|
|
|
407
447
|
}
|
|
408
448
|
|
|
409
449
|
# jscpd:ignore-start
|
|
410
|
-
def execute(
|
|
450
|
+
def execute( # noqa: PLR0913 # Signature fixed by the IShellExecutor port.
|
|
411
451
|
self,
|
|
412
452
|
command: str,
|
|
413
453
|
cwd: Optional[str] = None,
|
|
@@ -60,11 +60,14 @@ class SystemEnvironmentInspector(IEnvironmentInspector):
|
|
|
60
60
|
"""
|
|
61
61
|
Gathers the current Git status of the working directory in porcelain format.
|
|
62
62
|
"""
|
|
63
|
+
# Explicit decoding keeps a non-UTF-8 path byte from raising mid-read
|
|
64
|
+
# or emptying the status, which would hide pending changes.
|
|
63
65
|
try:
|
|
64
66
|
result = self._run_func( # nosec B603 B607
|
|
65
67
|
["git", "status", "--porcelain", "-b"],
|
|
66
68
|
capture_output=True,
|
|
67
|
-
|
|
69
|
+
encoding="utf-8",
|
|
70
|
+
errors="replace",
|
|
68
71
|
check=True,
|
|
69
72
|
stdin=subprocess.DEVNULL,
|
|
70
73
|
)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/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
|
{teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/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.dev1368 → teddy_cli-0.1.17.dev1370}/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.dev1368 → teddy_cli-0.1.17.dev1370}/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.dev1368 → teddy_cli-0.1.17.dev1370}/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.dev1368 → teddy_cli-0.1.17.dev1370}/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.dev1368 → teddy_cli-0.1.17.dev1370}/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.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/utils/markdown.py
RENAMED
|
File without changes
|
{teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/utils/paths.py
RENAMED
|
File without changes
|
{teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/utils/serialization.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/utils/string.py
RENAMED
|
File without changes
|
{teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/core/utils/terminal.py
RENAMED
|
File without changes
|
|
File without changes
|
{teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/registries/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/registries/reviewer.py
RENAMED
|
File without changes
|
{teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/src/teddy_executor/registries/validators.py
RENAMED
|
File without changes
|
|
File without changes
|
{teddy_cli-0.1.17.dev1368 → teddy_cli-0.1.17.dev1370}/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.dev1368 → teddy_cli-0.1.17.dev1370}/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
|