teddy-cli 0.1.17.dev1378__tar.gz → 0.1.17.dev1380__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.dev1378 → teddy_cli-0.1.17.dev1380}/PKG-INFO +1 -1
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/pyproject.toml +1 -1
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/adapters/outbound/yaml_config_adapter.py +74 -18
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/.gitignore +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/LICENSE +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/README.md +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/__main__.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/adapters/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/adapters/inbound/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/adapters/inbound/cli_formatter.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/adapters/inbound/cli_helpers.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/adapters/inbound/session_cli_handlers.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/adapters/inbound/textual_plan_reviewer.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_app.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_editor.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_execution.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_helpers.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_logic.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_previews.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_widgets.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/adapters/outbound/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/adapters/outbound/console_interactor.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/adapters/outbound/console_interactor_ask_loop.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/adapters/outbound/console_interactor_helpers.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/adapters/outbound/console_tooling.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/adapters/outbound/filesystem_helpers.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/adapters/outbound/litellm_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/adapters/outbound/local_file_system_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/adapters/outbound/local_repo_tree_generator.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/adapters/outbound/openrouter_hydrator.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/adapters/outbound/shell_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/adapters/outbound/shell_command_builder.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/adapters/outbound/suppressed_logging.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/adapters/outbound/system_environment_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/adapters/outbound/system_environment_inspector.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/adapters/outbound/system_time_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/adapters/outbound/terminal_quit_key_listener.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/adapters/outbound/web_scraper_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/adapters/outbound/web_searcher_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/container.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/domain/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/domain/models/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/domain/models/action_ports.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/domain/models/change_set.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/domain/models/drift_report.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/domain/models/exceptions.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/domain/models/execution_report.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/domain/models/orchestrator_ports.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/domain/models/plan.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/domain/models/planning_ports.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/domain/models/project_context.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/domain/models/report_assembly_data.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/domain/models/session.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/domain/models/shell_output.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/domain/models/web_search_results.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/ports/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/ports/inbound/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/ports/inbound/edit_simulator.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/ports/inbound/get_context_use_case.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/ports/inbound/init.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/ports/inbound/plan_parser.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/ports/inbound/plan_reviewer.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/ports/inbound/plan_validator.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/ports/inbound/planning_use_case.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/ports/inbound/run_plan_use_case.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/ports/outbound/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/ports/outbound/config_service.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/ports/outbound/environment_inspector.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/ports/outbound/execution_report_assembler.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/ports/outbound/file_system_manager.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/ports/outbound/llm_client.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/ports/outbound/markdown_report_formatter.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/ports/outbound/prompt_manager.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/ports/outbound/quit_key_listener.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/ports/outbound/repo_tree_generator.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/ports/outbound/session_loop_guard.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/ports/outbound/session_manager.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/ports/outbound/session_repository.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/ports/outbound/shell_executor.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/ports/outbound/system_environment.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/ports/outbound/time_service.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/ports/outbound/user_interactor.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/ports/outbound/web_scraper.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/ports/outbound/web_searcher.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/services/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/services/action_changeset_builder.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/services/action_diff_manager.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/services/action_dispatcher.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/services/action_executor.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/services/action_factory.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/services/action_parser_complex.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/services/action_parser_strategies.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/services/context_service.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/services/edit_simulator.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/services/execution_orchestrator.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/services/execution_report_assembler.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/services/init_service.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/services/markdown_plan_parser.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/services/markdown_report_formatter.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/services/parser_infrastructure.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/services/parser_metadata.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/services/parser_reporting.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/services/plan_validator.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/services/planning_service.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/services/prompt_manager.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/services/session_lifecycle_manager.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/services/session_loop_guard.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/services/session_orchestrator.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/services/session_planner.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/services/session_pruning_service.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/services/session_replanner.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/services/session_repository.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/services/session_service.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/services/templates/execution_report.md.j2 +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/services/update_checker.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/services/validation_rules/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/services/validation_rules/edit.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/services/validation_rules/edit_matcher.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/services/validation_rules/edit_matcher_heuristics.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/services/validation_rules/execute.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/services/validation_rules/filesystem.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/services/validation_rules/helpers.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/services/validation_rules/message.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/utils/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/utils/diff.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/utils/editor_names.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/utils/interrupt_guard.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/utils/io.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/utils/markdown.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/utils/paths.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/utils/serialization.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/utils/session_notices.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/utils/stdin_ownership.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/utils/string.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/utils/terminal.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/prompts.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/registries/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/registries/infrastructure.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/registries/reviewer.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/registries/validators.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/resources/MRP.md +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/resources/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/resources/config/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/resources/config/config.yaml +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/resources/config/init.context +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/resources/config/prompts/architect.md +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/resources/config/prompts/assistant.md +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/resources/config/prompts/debugger.md +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/resources/config/prompts/developer.md +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/resources/config/prompts/pathfinder.md +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/resources/config/prompts/prototyper.md +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/resources/templates/ARCHITECTURE.md +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/resources/templates/PROJECT.md +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/resources/templates/case-file.md +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/resources/templates/ci.md +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/resources/templates/component-design.md +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/resources/templates/makefile.md +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/resources/templates/milestone.md +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/resources/templates/pre-commit.md +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/resources/templates/specification-document.md +0 -0
- {teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/resources/templates/vertical-slice.md +0 -0
|
@@ -1,15 +1,67 @@
|
|
|
1
1
|
import os
|
|
2
2
|
import re
|
|
3
|
+
from collections.abc import Hashable
|
|
3
4
|
from importlib import resources
|
|
4
5
|
from typing import Any, Dict, Optional
|
|
5
6
|
import yaml
|
|
6
7
|
from dotenv import dotenv_values, set_key
|
|
8
|
+
from teddy_executor.core.domain.models.exceptions import ConfigurationError
|
|
7
9
|
from teddy_executor.core.ports.outbound.config_service import IConfigService
|
|
8
10
|
|
|
9
11
|
_INTERPOLATION_PATTERN = re.compile(
|
|
10
12
|
r"\$\$|\$\{([_A-Za-z][_A-Za-z0-9]*)(?::-([^}]*))?\}"
|
|
11
13
|
)
|
|
12
14
|
|
|
15
|
+
_MERGE_TAG = "tag:yaml.org,2002:merge"
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def _strict_load(text: str, source_path: str) -> Any:
|
|
19
|
+
"""Parse ``text`` and reject a repeated mapping key at any depth."""
|
|
20
|
+
|
|
21
|
+
class _StrictLoader(yaml.SafeLoader):
|
|
22
|
+
pass
|
|
23
|
+
|
|
24
|
+
def _construct_mapping(
|
|
25
|
+
loader: yaml.SafeLoader, node: yaml.MappingNode, deep: bool = False
|
|
26
|
+
) -> Dict[Any, Any]:
|
|
27
|
+
if isinstance(node, yaml.MappingNode):
|
|
28
|
+
seen: set[Any] = set()
|
|
29
|
+
for key_node, _value_node in node.value:
|
|
30
|
+
if key_node.tag == _MERGE_TAG:
|
|
31
|
+
continue
|
|
32
|
+
key = loader.construct_object(key_node, deep=True)
|
|
33
|
+
if not isinstance(key, Hashable):
|
|
34
|
+
# An unhashable key is invalid YAML for a mapping. The base
|
|
35
|
+
# loader raises its standard error, which the adapter treats
|
|
36
|
+
# as an unreadable user config.
|
|
37
|
+
continue
|
|
38
|
+
if key in seen:
|
|
39
|
+
line = key_node.start_mark.line + 1
|
|
40
|
+
raise ConfigurationError(
|
|
41
|
+
f"Duplicate configuration key {key!r} in {source_path} "
|
|
42
|
+
f"at line {line}. Remove or rename one occurrence."
|
|
43
|
+
)
|
|
44
|
+
seen.add(key)
|
|
45
|
+
return yaml.SafeLoader.construct_mapping(loader, node, deep=deep)
|
|
46
|
+
|
|
47
|
+
_StrictLoader.add_constructor(
|
|
48
|
+
yaml.resolver.BaseResolver.DEFAULT_MAPPING_TAG, _construct_mapping
|
|
49
|
+
)
|
|
50
|
+
return yaml.load(text, Loader=_StrictLoader)
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def _normalize_key_token(token: str) -> str:
|
|
54
|
+
"""Unquote a YAML key token so ``"llm.model"`` matches ``llm.model``."""
|
|
55
|
+
quote = token[:1]
|
|
56
|
+
if quote and quote in ("'", '"') and token[-1:] == quote:
|
|
57
|
+
try:
|
|
58
|
+
parsed = yaml.safe_load(token)
|
|
59
|
+
except yaml.YAMLError:
|
|
60
|
+
return token
|
|
61
|
+
if isinstance(parsed, str):
|
|
62
|
+
return parsed
|
|
63
|
+
return token
|
|
64
|
+
|
|
13
65
|
|
|
14
66
|
class YamlConfigAdapter(IConfigService):
|
|
15
67
|
"""
|
|
@@ -51,13 +103,17 @@ class YamlConfigAdapter(IConfigService):
|
|
|
51
103
|
return {}
|
|
52
104
|
|
|
53
105
|
def _load_user_config(self) -> Dict[str, Any]:
|
|
54
|
-
"""Loads the user
|
|
106
|
+
"""Loads the user config, failing fast on a repeated mapping key.
|
|
107
|
+
|
|
108
|
+
Unreadable YAML still falls back to an empty user config, but a
|
|
109
|
+
``ConfigurationError`` for a duplicate key propagates to the caller.
|
|
110
|
+
"""
|
|
55
111
|
if not os.path.exists(self._config_path):
|
|
56
112
|
return {}
|
|
57
113
|
|
|
58
114
|
try:
|
|
59
115
|
with open(self._config_path, "r", encoding="utf-8") as f:
|
|
60
|
-
data =
|
|
116
|
+
data = _strict_load(f.read(), self._config_path)
|
|
61
117
|
return data if isinstance(data, dict) else {}
|
|
62
118
|
except (yaml.YAMLError, OSError):
|
|
63
119
|
return {}
|
|
@@ -189,10 +245,11 @@ class YamlConfigAdapter(IConfigService):
|
|
|
189
245
|
through a data-only loader (``yaml.safe_load``/``yaml.dump``), which
|
|
190
246
|
would strip all comments and reformat the document.
|
|
191
247
|
|
|
192
|
-
Supports dot-notation for nested keys
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
248
|
+
Supports dot-notation for nested keys and honours the same precedence
|
|
249
|
+
as ``get_setting``: an exact top-level dotted key wins over a nested
|
|
250
|
+
key. The user config file and its parent directory are created if they
|
|
251
|
+
do not exist. After writing, the merged cache is rebuilt from disk so a
|
|
252
|
+
subsequent ``get_setting()`` on THIS adapter matches a fresh reload.
|
|
196
253
|
"""
|
|
197
254
|
# 1. Ensure the parent directory exists.
|
|
198
255
|
parent_dir = os.path.dirname(self._config_path)
|
|
@@ -212,16 +269,11 @@ class YamlConfigAdapter(IConfigService):
|
|
|
212
269
|
with open(self._config_path, "w", encoding="utf-8") as f:
|
|
213
270
|
f.write(text)
|
|
214
271
|
|
|
215
|
-
# 4.
|
|
216
|
-
#
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
if not isinstance(nxt, dict):
|
|
221
|
-
nxt = {}
|
|
222
|
-
cache[part] = nxt
|
|
223
|
-
cache = nxt
|
|
224
|
-
cache[key_path[-1]] = value
|
|
272
|
+
# 4. Rebuild the merged cache from disk so a subsequent get_setting()
|
|
273
|
+
# on THIS adapter resolves exactly what a fresh adapter resolves.
|
|
274
|
+
merged = self._load_layered_config()
|
|
275
|
+
self._config.clear()
|
|
276
|
+
self._config.update(merged)
|
|
225
277
|
|
|
226
278
|
def _scalar_repr(self, value: Any) -> str:
|
|
227
279
|
"""Render a scalar value as YAML text with no document-end marker."""
|
|
@@ -238,7 +290,7 @@ class YamlConfigAdapter(IConfigService):
|
|
|
238
290
|
if ":" not in stripped:
|
|
239
291
|
continue
|
|
240
292
|
indent = len(raw) - len(raw.lstrip(" "))
|
|
241
|
-
key_part = stripped.split(":", 1)[0].strip()
|
|
293
|
+
key_part = _normalize_key_token(stripped.split(":", 1)[0].strip())
|
|
242
294
|
while stack and stack[-1][0] >= indent:
|
|
243
295
|
stack.pop()
|
|
244
296
|
current = [k for _, k in stack] + [key_part]
|
|
@@ -252,7 +304,11 @@ class YamlConfigAdapter(IConfigService):
|
|
|
252
304
|
lines = text.split("\n")
|
|
253
305
|
value_str = self._scalar_repr(value)
|
|
254
306
|
|
|
255
|
-
idx =
|
|
307
|
+
idx = None
|
|
308
|
+
if len(key_path) > 1:
|
|
309
|
+
idx = self._find_key_line(lines, [".".join(key_path)])
|
|
310
|
+
if idx is None:
|
|
311
|
+
idx = self._find_key_line(lines, key_path)
|
|
256
312
|
if idx is not None:
|
|
257
313
|
raw = lines[idx]
|
|
258
314
|
colon = raw.index(":")
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/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.dev1378 → teddy_cli-0.1.17.dev1380}/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.dev1378 → teddy_cli-0.1.17.dev1380}/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.dev1378 → teddy_cli-0.1.17.dev1380}/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.dev1378 → teddy_cli-0.1.17.dev1380}/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.dev1378 → teddy_cli-0.1.17.dev1380}/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.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/utils/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/utils/editor_names.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/utils/markdown.py
RENAMED
|
File without changes
|
{teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/utils/paths.py
RENAMED
|
File without changes
|
{teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/utils/serialization.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/utils/string.py
RENAMED
|
File without changes
|
{teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/core/utils/terminal.py
RENAMED
|
File without changes
|
|
File without changes
|
{teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/registries/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/registries/reviewer.py
RENAMED
|
File without changes
|
{teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/src/teddy_executor/registries/validators.py
RENAMED
|
File without changes
|
|
File without changes
|
{teddy_cli-0.1.17.dev1378 → teddy_cli-0.1.17.dev1380}/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.dev1378 → teddy_cli-0.1.17.dev1380}/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
|