teddy-cli 0.1.17.dev1402__tar.gz → 0.1.17.dev1403__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.dev1402 → teddy_cli-0.1.17.dev1403}/PKG-INFO +1 -1
  2. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/pyproject.toml +1 -1
  3. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/adapters/inbound/session_cli_handlers.py +35 -13
  4. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/.gitignore +0 -0
  5. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/LICENSE +0 -0
  6. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/README.md +0 -0
  7. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/__init__.py +0 -0
  8. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/__main__.py +0 -0
  9. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/adapters/__init__.py +0 -0
  10. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/adapters/inbound/__init__.py +0 -0
  11. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/adapters/inbound/cli_formatter.py +0 -0
  12. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/adapters/inbound/cli_helpers.py +0 -0
  13. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/adapters/inbound/textual_plan_reviewer.py +0 -0
  14. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_app.py +0 -0
  15. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_editor.py +0 -0
  16. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_execution.py +0 -0
  17. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_helpers.py +0 -0
  18. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_logic.py +0 -0
  19. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_previews.py +0 -0
  20. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_widgets.py +0 -0
  21. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/adapters/outbound/__init__.py +0 -0
  22. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/adapters/outbound/console_interactor.py +0 -0
  23. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/adapters/outbound/console_interactor_ask_loop.py +0 -0
  24. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/adapters/outbound/console_interactor_helpers.py +0 -0
  25. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/adapters/outbound/console_tooling.py +0 -0
  26. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/adapters/outbound/filesystem_helpers.py +0 -0
  27. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/adapters/outbound/litellm_adapter.py +0 -0
  28. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/adapters/outbound/local_file_system_adapter.py +0 -0
  29. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/adapters/outbound/local_repo_tree_generator.py +0 -0
  30. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/adapters/outbound/openrouter_hydrator.py +0 -0
  31. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/adapters/outbound/shell_adapter.py +0 -0
  32. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/adapters/outbound/shell_command_builder.py +0 -0
  33. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/adapters/outbound/suppressed_logging.py +0 -0
  34. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/adapters/outbound/system_environment_adapter.py +0 -0
  35. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/adapters/outbound/system_environment_inspector.py +0 -0
  36. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/adapters/outbound/system_time_adapter.py +0 -0
  37. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/adapters/outbound/terminal_quit_key_listener.py +0 -0
  38. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/adapters/outbound/web_scraper_adapter.py +0 -0
  39. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/adapters/outbound/web_searcher_adapter.py +0 -0
  40. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/adapters/outbound/yaml_config_adapter.py +0 -0
  41. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/container.py +0 -0
  42. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/__init__.py +0 -0
  43. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/domain/__init__.py +0 -0
  44. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/domain/models/__init__.py +0 -0
  45. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/domain/models/action_ports.py +0 -0
  46. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/domain/models/change_set.py +0 -0
  47. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/domain/models/config_schema.py +0 -0
  48. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/domain/models/drift_report.py +0 -0
  49. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/domain/models/exceptions.py +0 -0
  50. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/domain/models/execution_report.py +0 -0
  51. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/domain/models/orchestrator_ports.py +0 -0
  52. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/domain/models/plan.py +0 -0
  53. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/domain/models/planning_ports.py +0 -0
  54. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/domain/models/project_context.py +0 -0
  55. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/domain/models/report_assembly_data.py +0 -0
  56. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/domain/models/session.py +0 -0
  57. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/domain/models/shell_output.py +0 -0
  58. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/domain/models/web_search_results.py +0 -0
  59. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/ports/__init__.py +0 -0
  60. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/ports/inbound/__init__.py +0 -0
  61. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/ports/inbound/edit_simulator.py +0 -0
  62. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/ports/inbound/get_context_use_case.py +0 -0
  63. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/ports/inbound/init.py +0 -0
  64. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/ports/inbound/plan_parser.py +0 -0
  65. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/ports/inbound/plan_reviewer.py +0 -0
  66. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/ports/inbound/plan_validator.py +0 -0
  67. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/ports/inbound/planning_use_case.py +0 -0
  68. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/ports/inbound/run_plan_use_case.py +0 -0
  69. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/ports/outbound/__init__.py +0 -0
  70. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/ports/outbound/config_service.py +0 -0
  71. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/ports/outbound/environment_inspector.py +0 -0
  72. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/ports/outbound/execution_report_assembler.py +0 -0
  73. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/ports/outbound/file_system_manager.py +0 -0
  74. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/ports/outbound/llm_client.py +0 -0
  75. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/ports/outbound/markdown_report_formatter.py +0 -0
  76. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/ports/outbound/prompt_manager.py +0 -0
  77. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/ports/outbound/quit_key_listener.py +0 -0
  78. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/ports/outbound/repo_tree_generator.py +0 -0
  79. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/ports/outbound/session_loop_guard.py +0 -0
  80. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/ports/outbound/session_manager.py +0 -0
  81. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/ports/outbound/session_repository.py +0 -0
  82. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/ports/outbound/shell_executor.py +0 -0
  83. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/ports/outbound/system_environment.py +0 -0
  84. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/ports/outbound/time_service.py +0 -0
  85. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/ports/outbound/user_interactor.py +0 -0
  86. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/ports/outbound/web_scraper.py +0 -0
  87. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/ports/outbound/web_searcher.py +0 -0
  88. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/services/__init__.py +0 -0
  89. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/services/action_changeset_builder.py +0 -0
  90. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/services/action_diff_manager.py +0 -0
  91. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/services/action_dispatcher.py +0 -0
  92. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/services/action_executor.py +0 -0
  93. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/services/action_factory.py +0 -0
  94. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/services/action_parser_complex.py +0 -0
  95. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/services/action_parser_strategies.py +0 -0
  96. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/services/context_service.py +0 -0
  97. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/services/edit_simulator.py +0 -0
  98. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/services/execution_orchestrator.py +0 -0
  99. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/services/execution_report_assembler.py +0 -0
  100. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/services/init_service.py +0 -0
  101. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/services/markdown_plan_parser.py +0 -0
  102. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/services/markdown_report_formatter.py +0 -0
  103. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/services/parser_infrastructure.py +0 -0
  104. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/services/parser_metadata.py +0 -0
  105. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/services/parser_reporting.py +0 -0
  106. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/services/plan_validator.py +0 -0
  107. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/services/planning_service.py +0 -0
  108. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/services/prompt_manager.py +0 -0
  109. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/services/session_lifecycle_manager.py +0 -0
  110. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/services/session_loop_guard.py +0 -0
  111. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/services/session_orchestrator.py +0 -0
  112. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/services/session_planner.py +0 -0
  113. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/services/session_pruning_service.py +0 -0
  114. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/services/session_replanner.py +0 -0
  115. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/services/session_repository.py +0 -0
  116. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/services/session_service.py +0 -0
  117. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/services/templates/execution_report.md.j2 +0 -0
  118. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/services/update_checker.py +0 -0
  119. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/services/validation_rules/__init__.py +0 -0
  120. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/services/validation_rules/edit.py +0 -0
  121. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/services/validation_rules/edit_matcher.py +0 -0
  122. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/services/validation_rules/edit_matcher_heuristics.py +0 -0
  123. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/services/validation_rules/execute.py +0 -0
  124. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/services/validation_rules/filesystem.py +0 -0
  125. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/services/validation_rules/helpers.py +0 -0
  126. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/services/validation_rules/message.py +0 -0
  127. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/utils/__init__.py +0 -0
  128. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/utils/diff.py +0 -0
  129. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/utils/editor_names.py +0 -0
  130. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/utils/interrupt_guard.py +0 -0
  131. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/utils/interruptible_call.py +0 -0
  132. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/utils/io.py +0 -0
  133. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/utils/markdown.py +0 -0
  134. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/utils/paths.py +0 -0
  135. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/utils/serialization.py +0 -0
  136. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/utils/session_notices.py +0 -0
  137. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/utils/stdin_ownership.py +0 -0
  138. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/utils/string.py +0 -0
  139. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/core/utils/terminal.py +0 -0
  140. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/prompts.py +0 -0
  141. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/registries/__init__.py +0 -0
  142. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/registries/infrastructure.py +0 -0
  143. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/registries/reviewer.py +0 -0
  144. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/registries/validators.py +0 -0
  145. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/resources/MRP.md +0 -0
  146. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/resources/__init__.py +0 -0
  147. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/resources/config/__init__.py +0 -0
  148. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/resources/config/config.yaml +0 -0
  149. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/resources/config/init.context +0 -0
  150. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/resources/config/prompts/architect.md +0 -0
  151. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/resources/config/prompts/assistant.md +0 -0
  152. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/resources/config/prompts/debugger.md +0 -0
  153. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/resources/config/prompts/developer.md +0 -0
  154. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/resources/config/prompts/pathfinder.md +0 -0
  155. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/resources/config/prompts/prototyper.md +0 -0
  156. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/resources/templates/ARCHITECTURE.md +0 -0
  157. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/resources/templates/PROJECT.md +0 -0
  158. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/resources/templates/case-file.md +0 -0
  159. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/resources/templates/ci.md +0 -0
  160. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/resources/templates/component-design.md +0 -0
  161. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/resources/templates/makefile.md +0 -0
  162. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/resources/templates/milestone.md +0 -0
  163. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/resources/templates/pre-commit.md +0 -0
  164. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/src/teddy_executor/resources/templates/specification-document.md +0 -0
  165. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1403}/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.dev1402
3
+ Version: 0.1.17.dev1403
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.dev1402"
3
+ version = "0.1.17.dev1403"
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 = [
@@ -285,6 +285,7 @@ def _run_health_checks(config_service: IConfigService) -> None:
285
285
  _GIT_PULL_TIMEOUT_SECONDS = 15
286
286
  _PULL_SKIPPED_WARNING = "⚠ Workspace pull skipped; continuing with the current branch."
287
287
  _PULL_TIMEOUT_WARNING = "⚠ Workspace pull timed out; continuing without it."
288
+ _PULL_GIT_UNAVAILABLE_WARNING = "⚠ Workspace pull skipped; git is unavailable."
288
289
  _IN_PROGRESS_GIT_MARKERS = (
289
290
  "rebase-merge",
290
291
  "rebase-apply",
@@ -293,6 +294,16 @@ _IN_PROGRESS_GIT_MARKERS = (
293
294
  )
294
295
 
295
296
 
297
+ def _warn_pull(message: str) -> None:
298
+ """Print one yellow pull warning followed by a blank line.
299
+
300
+ The trailing blank line keeps every pull block, success or warning, the
301
+ same height before the ``Checking configurations...`` line.
302
+ """
303
+ typer.secho(message, fg=typer.colors.YELLOW, err=True)
304
+ typer.echo("", err=True)
305
+
306
+
296
307
  def _pull_workspace_on_start(
297
308
  config_service: IConfigService,
298
309
  run_func: Optional[Callable[..., Any]] = None,
@@ -303,8 +314,9 @@ def _pull_workspace_on_start(
303
314
  a Git repository, so a disabled toggle or a non-repository directory stays
304
315
  silent. A detached HEAD, a missing upstream, or an in-progress operation
305
316
  also stays silent, because there is nothing safe to fast-forward. A dirty
306
- worktree or a failed pull reports one warning and leaves the workspace
307
- unchanged. A successful fast-forward names the number of commits it moved.
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.
308
320
 
309
321
  The Git process is injected through ``run_func`` so every decision is
310
322
  testable without spawning a real repository.
@@ -317,7 +329,9 @@ def _pull_workspace_on_start(
317
329
  try:
318
330
  _fast_forward_workspace(git_run)
319
331
  except subprocess.TimeoutExpired:
320
- typer.secho(_PULL_TIMEOUT_WARNING, fg=typer.colors.YELLOW, err=True)
332
+ _warn_pull(_PULL_TIMEOUT_WARNING)
333
+ except OSError:
334
+ _warn_pull(_PULL_GIT_UNAVAILABLE_WARNING)
321
335
 
322
336
 
323
337
  def _fast_forward_workspace(git_run: Callable[..., Any]) -> None:
@@ -330,7 +344,7 @@ def _fast_forward_workspace(git_run: Callable[..., Any]) -> None:
330
344
  skip_reason = _pull_skip_reason(git_run)
331
345
  if skip_reason is not None:
332
346
  if skip_reason:
333
- typer.secho(skip_reason, fg=typer.colors.YELLOW, err=True)
347
+ _warn_pull(skip_reason)
334
348
  return
335
349
  before = _read_head(git_run)
336
350
  result = git_run(
@@ -341,7 +355,7 @@ def _fast_forward_workspace(git_run: Callable[..., Any]) -> None:
341
355
  timeout=_GIT_PULL_TIMEOUT_SECONDS,
342
356
  )
343
357
  if result.returncode != 0:
344
- typer.secho(_PULL_SKIPPED_WARNING, fg=typer.colors.YELLOW, err=True)
358
+ _warn_pull(_PULL_SKIPPED_WARNING)
345
359
  return
346
360
  _report_fast_forward(git_run, before, _read_head(git_run))
347
361
 
@@ -414,10 +428,13 @@ def _report_fast_forward(git_run: Callable[..., Any], before: str, after: str) -
414
428
  return
415
429
  noun = "commit" if commits == 1 else "commits"
416
430
  typer.secho(
417
- f"Workspace fast-forwarded ({commits} {noun})",
431
+ f"✓ Workspace fast-forwarded ({commits} {noun})",
418
432
  fg=typer.colors.GREEN,
419
433
  err=True,
420
434
  )
435
+ # A trailing blank line separates the fast-forward block from the
436
+ # ``Checking configurations...`` line that follows it.
437
+ typer.echo("", err=True)
421
438
 
422
439
 
423
440
  def _start_background_update_check(container: Container) -> list[str]:
@@ -440,22 +457,27 @@ def _start_background_update_check(container: Container) -> list[str]:
440
457
  return _display_update_notification(container, cache_path)
441
458
 
442
459
 
443
- def _run_startup_preamble(
460
+ def _run_startup_preamble( # noqa: PLR0913 # Each parameter is an explicit startup gate.
444
461
  container: Container,
445
462
  fired: list[str],
446
463
  agent: Optional[str] = None,
447
464
  setup_editor: Optional[bool] = None,
448
465
  setup_api_key: Optional[bool] = None,
466
+ pull_workspace: bool = False,
449
467
  ) -> None:
450
468
  """Run the shared startup preamble for both session entry points.
451
469
 
452
470
  The order is fixed so the banner layout cannot drift: health checks, the
453
- ``Checking configurations...`` line, the preflight check (whose returned
454
- keys extend ``fired``), then the shared disable-footer. ``start`` forwards
455
- its ``agent`` so the preflight validates the agent prompt; ``resume``
456
- leaves it ``None`` and validates no agent.
471
+ start-only workspace fast-forward line, the ``Checking configurations...``
472
+ line, the preflight check (whose returned keys extend ``fired``), then the
473
+ shared disable-footer. ``start`` forwards its ``agent`` so the preflight
474
+ validates the agent prompt and enables ``pull_workspace``; ``resume``
475
+ leaves the agent ``None`` and keeps the pull off.
457
476
  """
458
- _run_health_checks(container.resolve(IConfigService))
477
+ config_service = container.resolve(IConfigService)
478
+ _run_health_checks(config_service)
479
+ if pull_workspace:
480
+ _pull_workspace_on_start(config_service)
459
481
  typer.echo("Checking configurations...", err=True)
460
482
  fired.extend(
461
483
  _run_cli_preflight_check(
@@ -861,8 +883,8 @@ def handle_new_session( # noqa: PLR0913
861
883
  agent=agent,
862
884
  setup_editor=setup_editor,
863
885
  setup_api_key=setup_api_key,
886
+ pull_workspace=True,
864
887
  )
865
- _pull_workspace_on_start(container.resolve(IConfigService))
866
888
  _echo_config_success(container, agent, model=model)
867
889
 
868
890
  session_manager: ISessionManager = container.resolve(ISessionManager)