teddy-cli 0.1.17.dev1397__tar.gz → 0.1.17.dev1399__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.dev1397 → teddy_cli-0.1.17.dev1399}/PKG-INFO +1 -1
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/pyproject.toml +1 -1
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/services/planning_service.py +32 -14
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/utils/interrupt_guard.py +12 -3
- teddy_cli-0.1.17.dev1399/src/teddy_executor/core/utils/interruptible_call.py +35 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/.gitignore +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/LICENSE +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/README.md +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/__main__.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/adapters/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/adapters/inbound/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/adapters/inbound/cli_formatter.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/adapters/inbound/cli_helpers.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/adapters/inbound/session_cli_handlers.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/adapters/inbound/textual_plan_reviewer.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_app.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_editor.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_execution.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_helpers.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_logic.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_previews.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_widgets.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/adapters/outbound/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/adapters/outbound/console_interactor.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/adapters/outbound/console_interactor_ask_loop.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/adapters/outbound/console_interactor_helpers.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/adapters/outbound/console_tooling.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/adapters/outbound/filesystem_helpers.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/adapters/outbound/litellm_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/adapters/outbound/local_file_system_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/adapters/outbound/local_repo_tree_generator.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/adapters/outbound/openrouter_hydrator.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/adapters/outbound/shell_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/adapters/outbound/shell_command_builder.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/adapters/outbound/suppressed_logging.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/adapters/outbound/system_environment_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/adapters/outbound/system_environment_inspector.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/adapters/outbound/system_time_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/adapters/outbound/terminal_quit_key_listener.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/adapters/outbound/web_scraper_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/adapters/outbound/web_searcher_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/adapters/outbound/yaml_config_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/container.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/domain/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/domain/models/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/domain/models/action_ports.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/domain/models/change_set.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/domain/models/drift_report.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/domain/models/exceptions.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/domain/models/execution_report.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/domain/models/orchestrator_ports.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/domain/models/plan.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/domain/models/planning_ports.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/domain/models/project_context.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/domain/models/report_assembly_data.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/domain/models/session.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/domain/models/shell_output.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/domain/models/web_search_results.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/ports/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/ports/inbound/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/ports/inbound/edit_simulator.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/ports/inbound/get_context_use_case.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/ports/inbound/init.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/ports/inbound/plan_parser.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/ports/inbound/plan_reviewer.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/ports/inbound/plan_validator.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/ports/inbound/planning_use_case.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/ports/inbound/run_plan_use_case.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/ports/outbound/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/ports/outbound/config_service.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/ports/outbound/environment_inspector.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/ports/outbound/execution_report_assembler.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/ports/outbound/file_system_manager.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/ports/outbound/llm_client.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/ports/outbound/markdown_report_formatter.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/ports/outbound/prompt_manager.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/ports/outbound/quit_key_listener.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/ports/outbound/repo_tree_generator.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/ports/outbound/session_loop_guard.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/ports/outbound/session_manager.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/ports/outbound/session_repository.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/ports/outbound/shell_executor.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/ports/outbound/system_environment.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/ports/outbound/time_service.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/ports/outbound/user_interactor.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/ports/outbound/web_scraper.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/ports/outbound/web_searcher.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/services/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/services/action_changeset_builder.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/services/action_diff_manager.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/services/action_dispatcher.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/services/action_executor.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/services/action_factory.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/services/action_parser_complex.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/services/action_parser_strategies.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/services/context_service.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/services/edit_simulator.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/services/execution_orchestrator.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/services/execution_report_assembler.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/services/init_service.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/services/markdown_plan_parser.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/services/markdown_report_formatter.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/services/parser_infrastructure.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/services/parser_metadata.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/services/parser_reporting.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/services/plan_validator.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/services/prompt_manager.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/services/session_lifecycle_manager.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/services/session_loop_guard.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/services/session_orchestrator.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/services/session_planner.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/services/session_pruning_service.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/services/session_replanner.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/services/session_repository.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/services/session_service.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/services/templates/execution_report.md.j2 +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/services/update_checker.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/services/validation_rules/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/services/validation_rules/edit.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/services/validation_rules/edit_matcher.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/services/validation_rules/edit_matcher_heuristics.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/services/validation_rules/execute.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/services/validation_rules/filesystem.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/services/validation_rules/helpers.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/services/validation_rules/message.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/utils/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/utils/diff.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/utils/editor_names.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/utils/io.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/utils/markdown.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/utils/paths.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/utils/serialization.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/utils/session_notices.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/utils/stdin_ownership.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/utils/string.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/utils/terminal.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/prompts.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/registries/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/registries/infrastructure.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/registries/reviewer.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/registries/validators.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/resources/MRP.md +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/resources/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/resources/config/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/resources/config/config.yaml +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/resources/config/init.context +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/resources/config/prompts/architect.md +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/resources/config/prompts/assistant.md +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/resources/config/prompts/debugger.md +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/resources/config/prompts/developer.md +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/resources/config/prompts/pathfinder.md +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/resources/config/prompts/prototyper.md +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/resources/templates/ARCHITECTURE.md +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/resources/templates/PROJECT.md +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/resources/templates/case-file.md +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/resources/templates/ci.md +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/resources/templates/component-design.md +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/resources/templates/makefile.md +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/resources/templates/milestone.md +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/resources/templates/pre-commit.md +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/resources/templates/specification-document.md +0 -0
- {teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/resources/templates/vertical-slice.md +0 -0
|
@@ -2,6 +2,7 @@ from pathlib import Path
|
|
|
2
2
|
from typing import Any, Dict, Optional, Sequence
|
|
3
3
|
from teddy_executor.core.domain.models import ProjectContext
|
|
4
4
|
from teddy_executor.core.ports.inbound.planning_use_case import IPlanningUseCase
|
|
5
|
+
from teddy_executor.core.utils.interruptible_call import run_interruptible
|
|
5
6
|
|
|
6
7
|
|
|
7
8
|
class PlanningService(IPlanningUseCase):
|
|
@@ -93,6 +94,36 @@ class PlanningService(IPlanningUseCase):
|
|
|
93
94
|
(turn_path / "input.md").as_posix(), full_context
|
|
94
95
|
)
|
|
95
96
|
|
|
97
|
+
response, token_count, plan_content, turn_cost = run_interruptible(
|
|
98
|
+
lambda: self._run_planning_phase(messages, model, meta)
|
|
99
|
+
)
|
|
100
|
+
|
|
101
|
+
cost_val = self._prompt_manager.log_telemetry(token_count, turn_cost)
|
|
102
|
+
plan_path = (turn_path / "plan.md").as_posix()
|
|
103
|
+
self._file_system_manager.write_file(plan_path, plan_content)
|
|
104
|
+
# Pre-populate meta["model"] before update_meta to ensure the user-configured
|
|
105
|
+
# model (with routing prefix like openrouter/) is preserved.
|
|
106
|
+
# This prevents the bug where meta["model"] was missing on first turn (no --model flag)
|
|
107
|
+
# and update_meta overwrote it with the bare actual model.
|
|
108
|
+
meta.setdefault("model", model)
|
|
109
|
+
self._prompt_manager.update_meta(
|
|
110
|
+
meta, response, token_count, turn_cost, meta_file_path
|
|
111
|
+
)
|
|
112
|
+
|
|
113
|
+
return plan_path, cost_val, context
|
|
114
|
+
|
|
115
|
+
def _run_planning_phase(
|
|
116
|
+
self,
|
|
117
|
+
messages: list[Dict[str, str]],
|
|
118
|
+
model: str,
|
|
119
|
+
meta: Dict[str, Any],
|
|
120
|
+
) -> tuple[Any, int, str, float]:
|
|
121
|
+
"""Perform every blocking planning call on the interruptible worker.
|
|
122
|
+
|
|
123
|
+
Hydration, the token count, telemetry, the budget check, and the
|
|
124
|
+
completion all touch the network. The main thread waits on this worker's
|
|
125
|
+
future, so a quit interrupts the wait instead of the raw socket read.
|
|
126
|
+
"""
|
|
96
127
|
# Pre-emptive Hydration: Trigger hydration via get_context_window BEFORE counting tokens.
|
|
97
128
|
# This ensures the model is known to the registry so token counting and telemetry work.
|
|
98
129
|
if self._user_interactor:
|
|
@@ -112,20 +143,7 @@ class PlanningService(IPlanningUseCase):
|
|
|
112
143
|
messages,
|
|
113
144
|
model=model,
|
|
114
145
|
)
|
|
115
|
-
|
|
116
|
-
cost_val = self._prompt_manager.log_telemetry(token_count, turn_cost)
|
|
117
|
-
plan_path = (turn_path / "plan.md").as_posix()
|
|
118
|
-
self._file_system_manager.write_file(plan_path, plan_content)
|
|
119
|
-
# Pre-populate meta["model"] before update_meta to ensure the user-configured
|
|
120
|
-
# model (with routing prefix like openrouter/) is preserved.
|
|
121
|
-
# This prevents the bug where meta["model"] was missing on first turn (no --model flag)
|
|
122
|
-
# and update_meta overwrote it with the bare actual model.
|
|
123
|
-
meta.setdefault("model", model)
|
|
124
|
-
self._prompt_manager.update_meta(
|
|
125
|
-
meta, response, token_count, turn_cost, meta_file_path
|
|
126
|
-
)
|
|
127
|
-
|
|
128
|
-
return plan_path, cost_val, context
|
|
146
|
+
return response, token_count, plan_content, turn_cost
|
|
129
147
|
|
|
130
148
|
def _perform_generation_with_retry(
|
|
131
149
|
self,
|
|
@@ -18,6 +18,7 @@ import-free of DI frameworks (hexagonal core boundary).
|
|
|
18
18
|
"""
|
|
19
19
|
|
|
20
20
|
import signal
|
|
21
|
+
import sys
|
|
21
22
|
import threading
|
|
22
23
|
from collections.abc import Callable
|
|
23
24
|
from contextlib import contextmanager
|
|
@@ -128,8 +129,16 @@ def raise_interrupt() -> None:
|
|
|
128
129
|
|
|
129
130
|
``os.kill(os.getpid(), signal.SIGINT)`` terminates the process on Windows
|
|
130
131
|
through ``TerminateProcess`` instead of invoking the Python SIGINT handler,
|
|
131
|
-
which suppresses the interrupt notice.
|
|
132
|
-
|
|
133
|
-
|
|
132
|
+
which suppresses the interrupt notice. On POSIX the signal targets the main
|
|
133
|
+
thread through ``signal.pthread_kill``, so delivery wakes a blocked main
|
|
134
|
+
thread at its next checkpoint instead of waiting for the calling thread to
|
|
135
|
+
return. Windows and any platform without ``pthread_kill`` use
|
|
136
|
+
``signal.raise_signal``, which keeps the CRT raise path so the installed
|
|
137
|
+
handler still runs there.
|
|
134
138
|
"""
|
|
139
|
+
if sys.platform != "win32" and hasattr(signal, "pthread_kill"):
|
|
140
|
+
main_ident = threading.main_thread().ident
|
|
141
|
+
if main_ident is not None:
|
|
142
|
+
signal.pthread_kill(main_ident, signal.SIGINT)
|
|
143
|
+
return
|
|
135
144
|
signal.raise_signal(signal.SIGINT)
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"""Run a blocking callable on a daemon worker so a quit can wake the waiter.
|
|
2
|
+
|
|
3
|
+
The planning completion blocks the main thread inside a raw socket read. A
|
|
4
|
+
POSIX signal reaches that call only through a main-thread target, and the
|
|
5
|
+
Windows CRT raise cannot wake it at all. Running the call on a daemon worker
|
|
6
|
+
keeps the main thread in a condition wait, which every SIGINT delivery
|
|
7
|
+
primitive wakes immediately.
|
|
8
|
+
|
|
9
|
+
The worker is a daemon so a pending completion cannot block process exit after
|
|
10
|
+
a quit. Every worker failure is forwarded to the waiter unchanged.
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
from __future__ import annotations
|
|
14
|
+
|
|
15
|
+
import threading
|
|
16
|
+
from collections.abc import Callable
|
|
17
|
+
from concurrent.futures import Future
|
|
18
|
+
from typing import TypeVar
|
|
19
|
+
|
|
20
|
+
T = TypeVar("T")
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def run_interruptible(func: Callable[[], T]) -> T:
|
|
24
|
+
"""Run ``func`` on a daemon worker and return its result or raise its error."""
|
|
25
|
+
future: Future[T] = Future()
|
|
26
|
+
|
|
27
|
+
def _work() -> None:
|
|
28
|
+
try:
|
|
29
|
+
future.set_result(func())
|
|
30
|
+
except BaseException as exc: # forward every failure to the waiter
|
|
31
|
+
future.set_exception(exc)
|
|
32
|
+
|
|
33
|
+
worker = threading.Thread(target=_work, name="interruptible-call", daemon=True)
|
|
34
|
+
worker.start()
|
|
35
|
+
return future.result()
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/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
|
|
File without changes
|
{teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/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.dev1397 → teddy_cli-0.1.17.dev1399}/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.dev1397 → teddy_cli-0.1.17.dev1399}/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.dev1397 → teddy_cli-0.1.17.dev1399}/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.dev1397 → teddy_cli-0.1.17.dev1399}/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.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/utils/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/utils/editor_names.py
RENAMED
|
File without changes
|
|
File without changes
|
{teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/utils/markdown.py
RENAMED
|
File without changes
|
{teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/utils/paths.py
RENAMED
|
File without changes
|
{teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/utils/serialization.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/utils/string.py
RENAMED
|
File without changes
|
{teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/core/utils/terminal.py
RENAMED
|
File without changes
|
|
File without changes
|
{teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/registries/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/registries/reviewer.py
RENAMED
|
File without changes
|
{teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/src/teddy_executor/registries/validators.py
RENAMED
|
File without changes
|
|
File without changes
|
{teddy_cli-0.1.17.dev1397 → teddy_cli-0.1.17.dev1399}/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.dev1397 → teddy_cli-0.1.17.dev1399}/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
|