teddy-cli 0.1.17.dev1209__tar.gz → 0.1.17.dev1211__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.dev1209 → teddy_cli-0.1.17.dev1211}/PKG-INFO +1 -1
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/pyproject.toml +1 -1
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/adapters/inbound/session_cli_handlers.py +43 -4
- teddy_cli-0.1.17.dev1211/src/teddy_executor/core/domain/models/drift_report.py +38 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/ports/inbound/init.py +14 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/services/init_service.py +71 -8
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/.gitignore +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/LICENSE +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/__main__.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/adapters/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/adapters/inbound/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/adapters/inbound/cli_formatter.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/adapters/inbound/cli_helpers.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/adapters/inbound/textual_plan_reviewer.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_app.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_editor.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_execution.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_helpers.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_logic.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_previews.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_widgets.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/adapters/outbound/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/adapters/outbound/console_interactor.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/adapters/outbound/console_interactor_ask_loop.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/adapters/outbound/console_interactor_helpers.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/adapters/outbound/console_tooling.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/adapters/outbound/filesystem_helpers.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/adapters/outbound/litellm_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/adapters/outbound/local_file_system_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/adapters/outbound/local_repo_tree_generator.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/adapters/outbound/openrouter_hydrator.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/adapters/outbound/shell_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/adapters/outbound/shell_command_builder.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/adapters/outbound/suppressed_logging.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/adapters/outbound/system_environment_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/adapters/outbound/system_environment_inspector.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/adapters/outbound/system_time_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/adapters/outbound/terminal_quit_key_listener.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/adapters/outbound/web_scraper_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/adapters/outbound/web_searcher_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/adapters/outbound/yaml_config_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/container.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/domain/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/domain/models/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/domain/models/action_ports.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/domain/models/change_set.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/domain/models/exceptions.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/domain/models/execution_report.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/domain/models/orchestrator_ports.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/domain/models/plan.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/domain/models/planning_ports.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/domain/models/project_context.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/domain/models/report_assembly_data.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/domain/models/session.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/domain/models/shell_output.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/domain/models/web_search_results.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/ports/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/ports/inbound/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/ports/inbound/edit_simulator.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/ports/inbound/get_context_use_case.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/ports/inbound/plan_parser.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/ports/inbound/plan_reviewer.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/ports/inbound/plan_validator.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/ports/inbound/planning_use_case.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/ports/inbound/run_plan_use_case.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/ports/outbound/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/ports/outbound/config_service.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/ports/outbound/environment_inspector.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/ports/outbound/execution_report_assembler.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/ports/outbound/file_system_manager.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/ports/outbound/llm_client.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/ports/outbound/markdown_report_formatter.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/ports/outbound/prompt_manager.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/ports/outbound/quit_key_listener.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/ports/outbound/repo_tree_generator.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/ports/outbound/session_loop_guard.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/ports/outbound/session_manager.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/ports/outbound/session_repository.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/ports/outbound/shell_executor.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/ports/outbound/system_environment.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/ports/outbound/time_service.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/ports/outbound/user_interactor.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/ports/outbound/web_scraper.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/ports/outbound/web_searcher.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/services/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/services/action_changeset_builder.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/services/action_diff_manager.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/services/action_dispatcher.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/services/action_executor.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/services/action_factory.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/services/action_parser_complex.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/services/action_parser_strategies.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/services/context_service.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/services/edit_simulator.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/services/execution_orchestrator.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/services/execution_report_assembler.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/services/markdown_plan_parser.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/services/markdown_report_formatter.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/services/parser_infrastructure.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/services/parser_metadata.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/services/parser_reporting.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/services/plan_validator.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/services/planning_service.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/services/prompt_manager.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/services/session_lifecycle_manager.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/services/session_loop_guard.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/services/session_orchestrator.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/services/session_planner.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/services/session_pruning_service.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/services/session_replanner.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/services/session_repository.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/services/session_service.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/services/templates/execution_report.md.j2 +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/services/update_checker.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/services/validation_rules/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/services/validation_rules/edit.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/services/validation_rules/edit_matcher.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/services/validation_rules/edit_matcher_heuristics.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/services/validation_rules/execute.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/services/validation_rules/filesystem.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/services/validation_rules/helpers.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/services/validation_rules/message.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/utils/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/utils/diff.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/utils/interrupt_guard.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/utils/io.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/utils/markdown.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/utils/serialization.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/utils/stdin_ownership.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/utils/string.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/utils/terminal.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/prompts.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/registries/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/registries/infrastructure.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/registries/reviewer.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/registries/validators.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/resources/MRP.xml +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/resources/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/resources/config/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/resources/config/config.yaml +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/resources/config/init.context +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/resources/config/prompts/architect.xml +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/resources/config/prompts/assistant.xml +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/resources/config/prompts/debugger.xml +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/resources/config/prompts/developer.xml +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/resources/config/prompts/pathfinder.xml +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/resources/config/prompts/prototyper.xml +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/resources/templates/ARCHITECTURE.md +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/resources/templates/PROJECT.md +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/resources/templates/case-file.md +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/resources/templates/ci.md +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/resources/templates/component-design.md +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/resources/templates/makefile.md +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/resources/templates/milestone.md +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/resources/templates/pre-commit.md +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/resources/templates/specification-document.md +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/resources/templates/task-brief.md +0 -0
- {teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/resources/templates/vertical-slice.md +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "teddy-cli"
|
|
3
|
-
version = "0.1.17.
|
|
3
|
+
version = "0.1.17.dev1211"
|
|
4
4
|
description = "A local-first, file-based AI coding workflow that applies the UNIX philosophy to AI collaboration."
|
|
5
5
|
authors = [{ name = "Raphael Atteritano" }]
|
|
6
6
|
license = { text = "AGPL-3.0-only" }
|
|
@@ -369,10 +369,48 @@ def _orchestrate_session_loop(
|
|
|
369
369
|
signal.signal(signal.SIGINT, previous_handler)
|
|
370
370
|
|
|
371
371
|
|
|
372
|
-
def
|
|
372
|
+
def _display_drift_notification(container: Container) -> None:
|
|
373
|
+
"""Advises the restore command when user prompts/templates have drifted.
|
|
374
|
+
|
|
375
|
+
Compares the user's ``.teddy/prompts/`` and ``docs/templates/`` against the
|
|
376
|
+
bundled defaults (via ``IInitUseCase.check_drift``) and, when they have
|
|
377
|
+
drifted (edited or missing), emits a yellow, actionable advice naming the
|
|
378
|
+
restore command(s). Advisory only: it runs on the preflight HEALTHY path and
|
|
379
|
+
never blocks the session. Gated by the checks.prompts_templates config
|
|
380
|
+
toggle (defaults to enabled).
|
|
381
|
+
"""
|
|
382
|
+
config = container.resolve(IConfigService)
|
|
383
|
+
if not config.get_setting("checks.prompts_templates", True):
|
|
384
|
+
return
|
|
385
|
+
|
|
386
|
+
report = container.resolve(IInitUseCase).check_drift()
|
|
387
|
+
if not report.has_drift:
|
|
388
|
+
return
|
|
389
|
+
|
|
390
|
+
commands: list[str] = []
|
|
391
|
+
if report.prompts_drifted:
|
|
392
|
+
commands.append("teddy init prompts")
|
|
393
|
+
if report.templates_drifted:
|
|
394
|
+
commands.append("teddy init templates")
|
|
395
|
+
|
|
396
|
+
typer.echo(
|
|
397
|
+
typer.style(
|
|
398
|
+
"ℹ Prompt/template drift detected. To restore the bundled "
|
|
399
|
+
f"defaults, run: {' and '.join(commands)}\n",
|
|
400
|
+
fg=typer.colors.YELLOW,
|
|
401
|
+
)
|
|
402
|
+
)
|
|
403
|
+
|
|
404
|
+
|
|
405
|
+
def _display_update_notification(container: Container, cache_path: Path) -> None:
|
|
373
406
|
"""Check the update cache and display a non-blocking notification
|
|
374
407
|
if a newer version is available. Called on session startup, after
|
|
375
|
-
the background check thread has been started.
|
|
408
|
+
the background check thread has been started. Gated by the
|
|
409
|
+
checks.update config toggle (defaults to enabled); a disabled toggle
|
|
410
|
+
suppresses the notification only -- the background fetch still runs."""
|
|
411
|
+
config = container.resolve(IConfigService)
|
|
412
|
+
if not config.get_setting("checks.update", True):
|
|
413
|
+
return
|
|
376
414
|
try:
|
|
377
415
|
cache = read_update_cache(cache_path)
|
|
378
416
|
if cache is None:
|
|
@@ -428,7 +466,7 @@ def handle_new_session( # noqa: PLR0913
|
|
|
428
466
|
daemon=True,
|
|
429
467
|
)
|
|
430
468
|
thread.start()
|
|
431
|
-
_display_update_notification(cache_path)
|
|
469
|
+
_display_update_notification(container, cache_path)
|
|
432
470
|
|
|
433
471
|
try:
|
|
434
472
|
# 0. Pipeline mode requires an initial message
|
|
@@ -591,6 +629,7 @@ def _run_cli_preflight_check(
|
|
|
591
629
|
# one-time setup stays decoupled from the approval flag (Slice 00-26).
|
|
592
630
|
if setup_editor:
|
|
593
631
|
_validate_editor_config(container)
|
|
632
|
+
_display_drift_notification(container)
|
|
594
633
|
return
|
|
595
634
|
|
|
596
635
|
error_msg = f"Configuration Error: {', '.join(errors)}"
|
|
@@ -977,7 +1016,7 @@ def handle_resume_session( # noqa: PLR0913
|
|
|
977
1016
|
daemon=True,
|
|
978
1017
|
)
|
|
979
1018
|
thread.start()
|
|
980
|
-
_display_update_notification(cache_path)
|
|
1019
|
+
_display_update_notification(container, cache_path)
|
|
981
1020
|
|
|
982
1021
|
try:
|
|
983
1022
|
# 1. Health checks (advisory, non-blocking)
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"""Domain model describing drift between user files and bundled defaults.
|
|
2
|
+
|
|
3
|
+
Seam Items 3/4 (session-behaviour): ``InitService.check_drift`` returns this
|
|
4
|
+
immutable report so the CLI preflight can advise ``teddy init prompts`` /
|
|
5
|
+
``teddy init templates`` when the user's local copies have diverged from (or are
|
|
6
|
+
missing relative to) the bundled defaults.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from dataclasses import dataclass
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
@dataclass(frozen=True)
|
|
13
|
+
class DriftReport:
|
|
14
|
+
"""Immutable summary of user files that diverge from bundled defaults.
|
|
15
|
+
|
|
16
|
+
Each field holds the *basenames* (e.g. ``pathfinder.xml``) of the affected
|
|
17
|
+
files, preserving the canonical manifest order for deterministic output.
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
edited_prompts: tuple[str, ...] = ()
|
|
21
|
+
missing_prompts: tuple[str, ...] = ()
|
|
22
|
+
edited_templates: tuple[str, ...] = ()
|
|
23
|
+
missing_templates: tuple[str, ...] = ()
|
|
24
|
+
|
|
25
|
+
@property
|
|
26
|
+
def prompts_drifted(self) -> bool:
|
|
27
|
+
"""True when any user prompt is edited or missing."""
|
|
28
|
+
return bool(self.edited_prompts or self.missing_prompts)
|
|
29
|
+
|
|
30
|
+
@property
|
|
31
|
+
def templates_drifted(self) -> bool:
|
|
32
|
+
"""True when any user template is edited or missing."""
|
|
33
|
+
return bool(self.edited_templates or self.missing_templates)
|
|
34
|
+
|
|
35
|
+
@property
|
|
36
|
+
def has_drift(self) -> bool:
|
|
37
|
+
"""True when any user prompt or template has drifted from its default."""
|
|
38
|
+
return self.prompts_drifted or self.templates_drifted
|
{teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/ports/inbound/init.py
RENAMED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
from abc import ABC, abstractmethod
|
|
2
2
|
|
|
3
|
+
from teddy_executor.core.domain.models.drift_report import DriftReport
|
|
4
|
+
|
|
3
5
|
|
|
4
6
|
class IInitUseCase(ABC):
|
|
5
7
|
"""
|
|
@@ -60,3 +62,15 @@ class IInitUseCase(ABC):
|
|
|
60
62
|
A human-readable status string (e.g., "Templates updated (11 files).").
|
|
61
63
|
"""
|
|
62
64
|
pass
|
|
65
|
+
|
|
66
|
+
@abstractmethod
|
|
67
|
+
def check_drift(self) -> DriftReport:
|
|
68
|
+
"""
|
|
69
|
+
Compares the user's prompts and templates against the bundled defaults.
|
|
70
|
+
|
|
71
|
+
Returns:
|
|
72
|
+
A DriftReport enumerating which ``.teddy/prompts/*.xml`` and
|
|
73
|
+
``docs/templates/*.md`` files are edited or missing relative to the
|
|
74
|
+
bundled defaults.
|
|
75
|
+
"""
|
|
76
|
+
pass
|
|
@@ -5,6 +5,7 @@ from importlib import resources
|
|
|
5
5
|
|
|
6
6
|
import yaml
|
|
7
7
|
|
|
8
|
+
from teddy_executor.core.domain.models.drift_report import DriftReport
|
|
8
9
|
from teddy_executor.core.ports.inbound.init import IInitUseCase
|
|
9
10
|
from teddy_executor.core.ports.outbound.file_system_manager import IFileSystemManager
|
|
10
11
|
|
|
@@ -53,6 +54,19 @@ _TEMPLATE_FILES = [
|
|
|
53
54
|
"pre-commit.md",
|
|
54
55
|
]
|
|
55
56
|
|
|
57
|
+
# Bundled prompt XMLs copied into a project's ``.teddy/prompts/`` by
|
|
58
|
+
# ``_init_prompts`` and compared by ``check_drift``. Kept as a fixed manifest
|
|
59
|
+
# (mirroring ``_TEMPLATE_FILES``) so the copy routine and the drift check share
|
|
60
|
+
# one single source of truth.
|
|
61
|
+
_PROMPT_FILES = [
|
|
62
|
+
"architect.xml",
|
|
63
|
+
"assistant.xml",
|
|
64
|
+
"debugger.xml",
|
|
65
|
+
"developer.xml",
|
|
66
|
+
"pathfinder.xml",
|
|
67
|
+
"prototyper.xml",
|
|
68
|
+
]
|
|
69
|
+
|
|
56
70
|
|
|
57
71
|
class InitService(IInitUseCase):
|
|
58
72
|
"""
|
|
@@ -189,14 +203,7 @@ class InitService(IInitUseCase):
|
|
|
189
203
|
"""
|
|
190
204
|
return self._copy_bundled_files(
|
|
191
205
|
dest_dir=".teddy/prompts",
|
|
192
|
-
filenames=
|
|
193
|
-
"architect.xml",
|
|
194
|
-
"assistant.xml",
|
|
195
|
-
"debugger.xml",
|
|
196
|
-
"developer.xml",
|
|
197
|
-
"pathfinder.xml",
|
|
198
|
-
"prototyper.xml",
|
|
199
|
-
],
|
|
206
|
+
filenames=_PROMPT_FILES,
|
|
200
207
|
resolve_content=lambda fname: self._get_default_content(f"prompts/{fname}"),
|
|
201
208
|
overwrite=overwrite,
|
|
202
209
|
)
|
|
@@ -285,3 +292,59 @@ class InitService(IInitUseCase):
|
|
|
285
292
|
"""
|
|
286
293
|
status = self._init_templates(overwrite=overwrite)
|
|
287
294
|
return f"Templates {status}."
|
|
295
|
+
|
|
296
|
+
def _classify_drift(
|
|
297
|
+
self,
|
|
298
|
+
dest_dir: str,
|
|
299
|
+
filenames: Sequence[str],
|
|
300
|
+
resolve_bundled: Callable[[str], str | None],
|
|
301
|
+
) -> tuple[tuple[str, ...], tuple[str, ...]]:
|
|
302
|
+
"""Partitions ``filenames`` into (edited, missing) against bundled defaults.
|
|
303
|
+
|
|
304
|
+
A file is MISSING when its user copy is absent. It is EDITED when the
|
|
305
|
+
user copy exists, a bundled default is resolvable, and the two contents
|
|
306
|
+
differ. Unresolvable bundled defaults are skipped (never reported as
|
|
307
|
+
drift). Order is preserved from ``filenames`` for deterministic output.
|
|
308
|
+
"""
|
|
309
|
+
edited: list[str] = []
|
|
310
|
+
missing: list[str] = []
|
|
311
|
+
for fname in filenames:
|
|
312
|
+
user_path = f"{dest_dir}/{fname}"
|
|
313
|
+
if not self._file_system.path_exists(user_path):
|
|
314
|
+
missing.append(fname)
|
|
315
|
+
continue
|
|
316
|
+
bundled_content = resolve_bundled(fname)
|
|
317
|
+
if bundled_content is None:
|
|
318
|
+
continue
|
|
319
|
+
if self._file_system.read_file(user_path) != bundled_content:
|
|
320
|
+
edited.append(fname)
|
|
321
|
+
return tuple(edited), tuple(missing)
|
|
322
|
+
|
|
323
|
+
def check_drift(self) -> DriftReport:
|
|
324
|
+
"""Compares the user's prompts and templates against bundled defaults.
|
|
325
|
+
|
|
326
|
+
Reports which ``.teddy/prompts/*.xml`` and ``docs/templates/*.md`` files
|
|
327
|
+
have been EDITED away from their bundled default and which are MISSING,
|
|
328
|
+
so the CLI preflight can advise ``teddy init prompts`` /
|
|
329
|
+
``teddy init templates``. An absent ``.teddy/prompts/`` directory simply
|
|
330
|
+
makes every prompt report as MISSING (per-file check, no directory
|
|
331
|
+
special-casing).
|
|
332
|
+
"""
|
|
333
|
+
edited_prompts, missing_prompts = self._classify_drift(
|
|
334
|
+
dest_dir=".teddy/prompts",
|
|
335
|
+
filenames=_PROMPT_FILES,
|
|
336
|
+
resolve_bundled=lambda fname: self._get_default_content(f"prompts/{fname}"),
|
|
337
|
+
)
|
|
338
|
+
edited_templates, missing_templates = self._classify_drift(
|
|
339
|
+
dest_dir="docs/templates",
|
|
340
|
+
filenames=_TEMPLATE_FILES,
|
|
341
|
+
resolve_bundled=lambda fname: self._read_bundled_resource(
|
|
342
|
+
self._templates_dir, fname
|
|
343
|
+
),
|
|
344
|
+
)
|
|
345
|
+
return DriftReport(
|
|
346
|
+
edited_prompts=edited_prompts,
|
|
347
|
+
missing_prompts=missing_prompts,
|
|
348
|
+
edited_templates=edited_templates,
|
|
349
|
+
missing_templates=missing_templates,
|
|
350
|
+
)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/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.dev1209 → teddy_cli-0.1.17.dev1211}/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
|
{teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/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.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/ports/__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
|
{teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/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.dev1209 → teddy_cli-0.1.17.dev1211}/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.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/utils/markdown.py
RENAMED
|
File without changes
|
{teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/utils/serialization.py
RENAMED
|
File without changes
|
|
File without changes
|
{teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/utils/string.py
RENAMED
|
File without changes
|
{teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/core/utils/terminal.py
RENAMED
|
File without changes
|
|
File without changes
|
{teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/registries/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/registries/reviewer.py
RENAMED
|
File without changes
|
{teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/src/teddy_executor/registries/validators.py
RENAMED
|
File without changes
|
|
File without changes
|
{teddy_cli-0.1.17.dev1209 → teddy_cli-0.1.17.dev1211}/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.dev1209 → teddy_cli-0.1.17.dev1211}/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
|
|
File without changes
|