teddy-cli 0.1.17.dev1420__tar.gz → 0.1.17.dev1421__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.
Files changed (165) hide show
  1. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/PKG-INFO +1 -1
  2. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/pyproject.toml +1 -1
  3. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/adapters/inbound/session_cli_handlers.py +50 -25
  4. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/.gitignore +0 -0
  5. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/LICENSE +0 -0
  6. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/README.md +0 -0
  7. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/__init__.py +0 -0
  8. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/__main__.py +0 -0
  9. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/adapters/__init__.py +0 -0
  10. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/adapters/inbound/__init__.py +0 -0
  11. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/adapters/inbound/cli_formatter.py +0 -0
  12. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/adapters/inbound/cli_helpers.py +0 -0
  13. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/adapters/inbound/textual_plan_reviewer.py +0 -0
  14. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_app.py +0 -0
  15. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_editor.py +0 -0
  16. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_execution.py +0 -0
  17. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_helpers.py +0 -0
  18. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_logic.py +0 -0
  19. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_previews.py +0 -0
  20. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_widgets.py +0 -0
  21. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/adapters/outbound/__init__.py +0 -0
  22. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/adapters/outbound/console_interactor.py +0 -0
  23. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/adapters/outbound/console_interactor_ask_loop.py +0 -0
  24. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/adapters/outbound/console_interactor_helpers.py +0 -0
  25. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/adapters/outbound/console_tooling.py +0 -0
  26. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/adapters/outbound/filesystem_helpers.py +0 -0
  27. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/adapters/outbound/litellm_adapter.py +0 -0
  28. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/adapters/outbound/local_file_system_adapter.py +0 -0
  29. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/adapters/outbound/local_repo_tree_generator.py +0 -0
  30. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/adapters/outbound/openrouter_hydrator.py +0 -0
  31. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/adapters/outbound/shell_adapter.py +0 -0
  32. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/adapters/outbound/shell_command_builder.py +0 -0
  33. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/adapters/outbound/suppressed_logging.py +0 -0
  34. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/adapters/outbound/system_environment_adapter.py +0 -0
  35. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/adapters/outbound/system_environment_inspector.py +0 -0
  36. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/adapters/outbound/system_time_adapter.py +0 -0
  37. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/adapters/outbound/terminal_quit_key_listener.py +0 -0
  38. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/adapters/outbound/web_scraper_adapter.py +0 -0
  39. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/adapters/outbound/web_searcher_adapter.py +0 -0
  40. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/adapters/outbound/yaml_config_adapter.py +0 -0
  41. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/container.py +0 -0
  42. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/__init__.py +0 -0
  43. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/domain/__init__.py +0 -0
  44. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/domain/models/__init__.py +0 -0
  45. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/domain/models/action_ports.py +0 -0
  46. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/domain/models/change_set.py +0 -0
  47. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/domain/models/config_schema.py +0 -0
  48. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/domain/models/drift_report.py +0 -0
  49. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/domain/models/exceptions.py +0 -0
  50. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/domain/models/execution_report.py +0 -0
  51. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/domain/models/orchestrator_ports.py +0 -0
  52. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/domain/models/plan.py +0 -0
  53. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/domain/models/planning_ports.py +0 -0
  54. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/domain/models/project_context.py +0 -0
  55. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/domain/models/report_assembly_data.py +0 -0
  56. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/domain/models/session.py +0 -0
  57. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/domain/models/shell_output.py +0 -0
  58. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/domain/models/web_search_results.py +0 -0
  59. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/ports/__init__.py +0 -0
  60. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/ports/inbound/__init__.py +0 -0
  61. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/ports/inbound/edit_simulator.py +0 -0
  62. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/ports/inbound/get_context_use_case.py +0 -0
  63. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/ports/inbound/init.py +0 -0
  64. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/ports/inbound/plan_parser.py +0 -0
  65. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/ports/inbound/plan_reviewer.py +0 -0
  66. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/ports/inbound/plan_validator.py +0 -0
  67. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/ports/inbound/planning_use_case.py +0 -0
  68. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/ports/inbound/run_plan_use_case.py +0 -0
  69. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/ports/outbound/__init__.py +0 -0
  70. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/ports/outbound/config_service.py +0 -0
  71. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/ports/outbound/environment_inspector.py +0 -0
  72. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/ports/outbound/execution_report_assembler.py +0 -0
  73. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/ports/outbound/file_system_manager.py +0 -0
  74. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/ports/outbound/llm_client.py +0 -0
  75. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/ports/outbound/markdown_report_formatter.py +0 -0
  76. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/ports/outbound/prompt_manager.py +0 -0
  77. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/ports/outbound/quit_key_listener.py +0 -0
  78. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/ports/outbound/repo_tree_generator.py +0 -0
  79. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/ports/outbound/session_loop_guard.py +0 -0
  80. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/ports/outbound/session_manager.py +0 -0
  81. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/ports/outbound/session_repository.py +0 -0
  82. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/ports/outbound/shell_executor.py +0 -0
  83. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/ports/outbound/system_environment.py +0 -0
  84. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/ports/outbound/time_service.py +0 -0
  85. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/ports/outbound/user_interactor.py +0 -0
  86. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/ports/outbound/web_scraper.py +0 -0
  87. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/ports/outbound/web_searcher.py +0 -0
  88. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/services/__init__.py +0 -0
  89. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/services/action_changeset_builder.py +0 -0
  90. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/services/action_diff_manager.py +0 -0
  91. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/services/action_dispatcher.py +0 -0
  92. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/services/action_executor.py +0 -0
  93. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/services/action_factory.py +0 -0
  94. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/services/action_parser_complex.py +0 -0
  95. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/services/action_parser_strategies.py +0 -0
  96. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/services/context_service.py +0 -0
  97. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/services/edit_simulator.py +0 -0
  98. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/services/execution_orchestrator.py +0 -0
  99. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/services/execution_report_assembler.py +0 -0
  100. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/services/init_service.py +0 -0
  101. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/services/markdown_plan_parser.py +0 -0
  102. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/services/markdown_report_formatter.py +0 -0
  103. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/services/parser_infrastructure.py +0 -0
  104. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/services/parser_metadata.py +0 -0
  105. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/services/parser_reporting.py +0 -0
  106. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/services/plan_validator.py +0 -0
  107. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/services/planning_service.py +0 -0
  108. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/services/prompt_manager.py +0 -0
  109. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/services/session_lifecycle_manager.py +0 -0
  110. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/services/session_loop_guard.py +0 -0
  111. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/services/session_orchestrator.py +0 -0
  112. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/services/session_planner.py +0 -0
  113. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/services/session_pruning_service.py +0 -0
  114. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/services/session_replanner.py +0 -0
  115. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/services/session_repository.py +0 -0
  116. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/services/session_service.py +0 -0
  117. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/services/templates/execution_report.md.j2 +0 -0
  118. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/services/update_checker.py +0 -0
  119. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/services/validation_rules/__init__.py +0 -0
  120. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/services/validation_rules/edit.py +0 -0
  121. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/services/validation_rules/edit_matcher.py +0 -0
  122. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/services/validation_rules/edit_matcher_heuristics.py +0 -0
  123. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/services/validation_rules/execute.py +0 -0
  124. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/services/validation_rules/filesystem.py +0 -0
  125. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/services/validation_rules/helpers.py +0 -0
  126. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/services/validation_rules/message.py +0 -0
  127. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/utils/__init__.py +0 -0
  128. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/utils/diff.py +0 -0
  129. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/utils/editor_names.py +0 -0
  130. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/utils/interrupt_guard.py +0 -0
  131. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/utils/interruptible_call.py +0 -0
  132. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/utils/io.py +0 -0
  133. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/utils/markdown.py +0 -0
  134. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/utils/paths.py +0 -0
  135. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/utils/serialization.py +0 -0
  136. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/utils/session_notices.py +0 -0
  137. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/utils/stdin_ownership.py +0 -0
  138. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/utils/string.py +0 -0
  139. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/core/utils/terminal.py +0 -0
  140. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/prompts.py +0 -0
  141. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/registries/__init__.py +0 -0
  142. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/registries/infrastructure.py +0 -0
  143. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/registries/reviewer.py +0 -0
  144. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/registries/validators.py +0 -0
  145. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/resources/MRP.md +0 -0
  146. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/resources/__init__.py +0 -0
  147. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/resources/config/__init__.py +0 -0
  148. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/resources/config/config.yaml +0 -0
  149. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/resources/config/init.context +0 -0
  150. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/resources/config/prompts/architect.md +0 -0
  151. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/resources/config/prompts/assistant.md +0 -0
  152. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/resources/config/prompts/debugger.md +0 -0
  153. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/resources/config/prompts/developer.md +0 -0
  154. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/resources/config/prompts/pathfinder.md +0 -0
  155. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/resources/config/prompts/prototyper.md +0 -0
  156. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/resources/templates/ARCHITECTURE.md +0 -0
  157. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/resources/templates/PROJECT.md +0 -0
  158. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/resources/templates/case-file.md +0 -0
  159. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/resources/templates/ci.md +0 -0
  160. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/resources/templates/component-design.md +0 -0
  161. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/resources/templates/makefile.md +0 -0
  162. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/resources/templates/milestone.md +0 -0
  163. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/resources/templates/pre-commit.md +0 -0
  164. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/resources/templates/specification-document.md +0 -0
  165. {teddy_cli-0.1.17.dev1420 → teddy_cli-0.1.17.dev1421}/src/teddy_executor/resources/templates/vertical-slice.md +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: teddy-cli
3
- Version: 0.1.17.dev1420
3
+ Version: 0.1.17.dev1421
4
4
  Summary: The local-first, test-driven agentic engineering harness. Because you should own the means of development.
5
5
  Author: Raphael Atteritano
6
6
  License: AGPL-3.0-only
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "teddy-cli"
3
- version = "0.1.17.dev1420"
3
+ version = "0.1.17.dev1421"
4
4
  description = "The local-first, test-driven agentic engineering harness. Because you should own the means of development."
5
5
  readme = "README.md"
6
6
  keywords = [
@@ -287,6 +287,9 @@ _PULL_SKIPPED_WARNING = "⚠ Workspace pull skipped; continuing with the current
287
287
  _PULL_TIMEOUT_WARNING = "⚠ Workspace pull timed out; continuing without it."
288
288
  _PULL_GIT_UNAVAILABLE_WARNING = "⚠ Workspace pull skipped; git is unavailable."
289
289
  _PULL_UP_TO_DATE_NOTICE = "✓ Workspace up-to-date with remote"
290
+ _PULL_IN_PROGRESS_NOTICE = "✓ Workspace pull skipped; Git operation in progress"
291
+ _PULL_DETACHED_HEAD_NOTICE = "✓ Workspace pull skipped; detached HEAD"
292
+ _PULL_NO_UPSTREAM_NOTICE = "✓ Workspace pull skipped; no upstream branch"
290
293
  _IN_PROGRESS_GIT_MARKERS = (
291
294
  "rebase-merge",
292
295
  "rebase-apply",
@@ -304,6 +307,15 @@ def _warn_pull(message: str) -> None:
304
307
  typer.secho(message, fg=typer.colors.YELLOW, err=True)
305
308
 
306
309
 
310
+ def _notice_pull(message: str) -> None:
311
+ """Print one green pull notice.
312
+
313
+ The checkmark line joins the startup block, so it carries no trailing
314
+ blank and never uses the warning color.
315
+ """
316
+ typer.secho(message, fg=typer.colors.GREEN, err=True)
317
+
318
+
307
319
  def _pull_workspace_on_start(
308
320
  config_service: IConfigService,
309
321
  run_func: Optional[Callable[..., Any]] = None,
@@ -313,10 +325,11 @@ def _pull_workspace_on_start(
313
325
  The pull runs only when ``workspace.pull`` is enabled and the workspace is
314
326
  a Git repository, so a disabled toggle or a non-repository directory stays
315
327
  silent. A detached HEAD, a missing upstream, or an in-progress operation
316
- also stays silent, because there is nothing safe to fast-forward. A dirty
317
- worktree, a failed pull, a timeout, or an unavailable git binary reports
318
- one warning and leaves the workspace unchanged. A successful fast-forward
319
- names the number of commits it moved.
328
+ reports one checkmark notice, because the user needs a pull outcome on
329
+ every run. A dirty worktree, a failed pull, a timeout, or an unavailable
330
+ git binary reports one warning and leaves the workspace unchanged. A
331
+ successful fast-forward names the number of commits it moved, and a pull
332
+ that moves no commit confirms the workspace is up to date.
320
333
 
321
334
  The Git process is injected through ``run_func`` so every decision is
322
335
  testable without spawning a real repository.
@@ -339,12 +352,16 @@ def _fast_forward_workspace(git_run: Callable[..., Any]) -> None:
339
352
 
340
353
  Each precondition is probed before the pull so an unsafe state never
341
354
  reaches ``git pull``. A dirty worktree reports one warning, while every
342
- other unsafe state stays silent because it has nothing to report.
355
+ other unsafe state reports one checkmark notice so the user always sees a
356
+ pull outcome.
343
357
  """
344
- skip_reason = _pull_skip_reason(git_run)
345
- if skip_reason is not None:
346
- if skip_reason:
347
- _warn_pull(skip_reason)
358
+ skip = _pull_skip_reason(git_run)
359
+ if skip is not None:
360
+ message, is_warning = skip
361
+ if is_warning:
362
+ _warn_pull(message)
363
+ else:
364
+ _notice_pull(message)
348
365
  return
349
366
  before = _read_head(git_run)
350
367
  result = git_run(
@@ -360,30 +377,33 @@ def _fast_forward_workspace(git_run: Callable[..., Any]) -> None:
360
377
  _report_fast_forward(git_run, before, _read_head(git_run))
361
378
 
362
379
 
363
- def _pull_skip_reason(git_run: Callable[..., Any]) -> Optional[str]:
364
- """Return the outcome text to print, or None when the pull may proceed.
380
+ def _pull_skip_reason(
381
+ git_run: Callable[..., Any],
382
+ ) -> Optional[tuple[str, bool]]:
383
+ """Return the outcome text and severity, or None when the pull may proceed.
365
384
 
366
- An empty string marks a silent skip, because the workspace holds no safe
367
- fast-forward and reporting it would only add noise. A dirty worktree
368
- returns the skipped warning, because tracked changes can conflict.
385
+ Each unsafe state names its own reason, because the user needs a pull
386
+ outcome on every run. The boolean marks a warning (``True``) versus a
387
+ checkmark notice (``False``). A dirty worktree returns the skipped
388
+ warning, because tracked changes can conflict.
369
389
  """
370
390
  git_dir = Path.cwd() / ".git"
371
391
  if any((git_dir / marker).exists() for marker in _IN_PROGRESS_GIT_MARKERS):
372
- return ""
392
+ return _PULL_IN_PROGRESS_NOTICE, False
373
393
  detached = git_run(
374
394
  ["git", "symbolic-ref", "-q", "HEAD"],
375
395
  capture_output=True,
376
396
  timeout=_GIT_PULL_TIMEOUT_SECONDS,
377
397
  )
378
398
  if detached.returncode != 0:
379
- return ""
399
+ return _PULL_DETACHED_HEAD_NOTICE, False
380
400
  upstream = git_run(
381
401
  ["git", "rev-parse", "--abbrev-ref", "--symbolic-full-name", "@{u}"],
382
402
  capture_output=True,
383
403
  timeout=_GIT_PULL_TIMEOUT_SECONDS,
384
404
  )
385
405
  if upstream.returncode != 0:
386
- return ""
406
+ return _PULL_NO_UPSTREAM_NOTICE, False
387
407
  status = git_run(
388
408
  ["git", "status", "--porcelain"],
389
409
  capture_output=True,
@@ -396,7 +416,7 @@ def _pull_skip_reason(git_run: Callable[..., Any]) -> Optional[str]:
396
416
  if line and not line.startswith("??")
397
417
  ]
398
418
  if tracked_changes:
399
- return _PULL_SKIPPED_WARNING
419
+ return _PULL_SKIPPED_WARNING, True
400
420
  return None
401
421
 
402
422
 
@@ -774,10 +794,10 @@ def _display_drift_notification(container: Container) -> list[str]:
774
794
  fired.append("checks.templates")
775
795
 
776
796
  if drift_lines:
777
- # The notices sit directly under ``Checking configurations...``. The
778
- # lines carry no trailing newline, so the shared disable-footer
779
- # (emitted next) abuts the final drift line.
780
- typer.echo("\n".join(drift_lines))
797
+ # Stderr keeps the notices in the startup banner order even when the
798
+ # run is redirected. The lines carry no trailing newline, so the
799
+ # shared disable-footer (emitted next) abuts the final drift line.
800
+ typer.echo("\n".join(drift_lines), err=True)
781
801
 
782
802
  return fired
783
803
 
@@ -797,10 +817,14 @@ def _display_checks_footer(keys: list[str]) -> None:
797
817
  ordered = [key for key in canonical if key in unique]
798
818
 
799
819
  if len(ordered) == 1:
800
- typer.echo(f"You can disable this check in .teddy/config.yaml: {ordered[0]}.")
820
+ typer.echo(
821
+ f"You can disable this check in .teddy/config.yaml: {ordered[0]}.",
822
+ err=True,
823
+ )
801
824
  else:
802
825
  typer.echo(
803
- f"You can disable these checks in .teddy/config.yaml: {', '.join(ordered)}."
826
+ f"You can disable these checks in .teddy/config.yaml: {', '.join(ordered)}.",
827
+ err=True,
804
828
  )
805
829
 
806
830
 
@@ -838,7 +862,8 @@ def _display_update_notification(container: Container, cache_path: Path) -> list
838
862
  f"ℹ A new version {latest} is available. "
839
863
  f"To upgrade, run: {command}\n",
840
864
  fg=typer.colors.YELLOW,
841
- )
865
+ ),
866
+ err=True,
842
867
  )
843
868
  return ["checks.update"]
844
869
  except Exception: