teddy-cli 0.1.17.dev1302__tar.gz → 0.1.17.dev1303__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 (162) hide show
  1. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/PKG-INFO +1 -1
  2. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/pyproject.toml +1 -1
  3. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/adapters/inbound/session_cli_handlers.py +83 -72
  4. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/.gitignore +0 -0
  5. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/LICENSE +0 -0
  6. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/README.md +0 -0
  7. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/__init__.py +0 -0
  8. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/__main__.py +0 -0
  9. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/adapters/__init__.py +0 -0
  10. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/adapters/inbound/__init__.py +0 -0
  11. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/adapters/inbound/cli_formatter.py +0 -0
  12. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/adapters/inbound/cli_helpers.py +0 -0
  13. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/adapters/inbound/textual_plan_reviewer.py +0 -0
  14. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_app.py +0 -0
  15. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_editor.py +0 -0
  16. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_execution.py +0 -0
  17. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_helpers.py +0 -0
  18. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_logic.py +0 -0
  19. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_previews.py +0 -0
  20. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_widgets.py +0 -0
  21. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/adapters/outbound/__init__.py +0 -0
  22. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/adapters/outbound/console_interactor.py +0 -0
  23. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/adapters/outbound/console_interactor_ask_loop.py +0 -0
  24. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/adapters/outbound/console_interactor_helpers.py +0 -0
  25. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/adapters/outbound/console_tooling.py +0 -0
  26. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/adapters/outbound/filesystem_helpers.py +0 -0
  27. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/adapters/outbound/litellm_adapter.py +0 -0
  28. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/adapters/outbound/local_file_system_adapter.py +0 -0
  29. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/adapters/outbound/local_repo_tree_generator.py +0 -0
  30. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/adapters/outbound/openrouter_hydrator.py +0 -0
  31. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/adapters/outbound/shell_adapter.py +0 -0
  32. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/adapters/outbound/shell_command_builder.py +0 -0
  33. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/adapters/outbound/suppressed_logging.py +0 -0
  34. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/adapters/outbound/system_environment_adapter.py +0 -0
  35. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/adapters/outbound/system_environment_inspector.py +0 -0
  36. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/adapters/outbound/system_time_adapter.py +0 -0
  37. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/adapters/outbound/terminal_quit_key_listener.py +0 -0
  38. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/adapters/outbound/web_scraper_adapter.py +0 -0
  39. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/adapters/outbound/web_searcher_adapter.py +0 -0
  40. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/adapters/outbound/yaml_config_adapter.py +0 -0
  41. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/container.py +0 -0
  42. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/__init__.py +0 -0
  43. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/domain/__init__.py +0 -0
  44. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/domain/models/__init__.py +0 -0
  45. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/domain/models/action_ports.py +0 -0
  46. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/domain/models/change_set.py +0 -0
  47. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/domain/models/drift_report.py +0 -0
  48. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/domain/models/exceptions.py +0 -0
  49. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/domain/models/execution_report.py +0 -0
  50. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/domain/models/orchestrator_ports.py +0 -0
  51. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/domain/models/plan.py +0 -0
  52. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/domain/models/planning_ports.py +0 -0
  53. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/domain/models/project_context.py +0 -0
  54. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/domain/models/report_assembly_data.py +0 -0
  55. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/domain/models/session.py +0 -0
  56. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/domain/models/shell_output.py +0 -0
  57. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/domain/models/web_search_results.py +0 -0
  58. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/ports/__init__.py +0 -0
  59. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/ports/inbound/__init__.py +0 -0
  60. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/ports/inbound/edit_simulator.py +0 -0
  61. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/ports/inbound/get_context_use_case.py +0 -0
  62. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/ports/inbound/init.py +0 -0
  63. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/ports/inbound/plan_parser.py +0 -0
  64. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/ports/inbound/plan_reviewer.py +0 -0
  65. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/ports/inbound/plan_validator.py +0 -0
  66. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/ports/inbound/planning_use_case.py +0 -0
  67. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/ports/inbound/run_plan_use_case.py +0 -0
  68. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/ports/outbound/__init__.py +0 -0
  69. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/ports/outbound/config_service.py +0 -0
  70. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/ports/outbound/environment_inspector.py +0 -0
  71. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/ports/outbound/execution_report_assembler.py +0 -0
  72. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/ports/outbound/file_system_manager.py +0 -0
  73. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/ports/outbound/llm_client.py +0 -0
  74. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/ports/outbound/markdown_report_formatter.py +0 -0
  75. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/ports/outbound/prompt_manager.py +0 -0
  76. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/ports/outbound/quit_key_listener.py +0 -0
  77. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/ports/outbound/repo_tree_generator.py +0 -0
  78. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/ports/outbound/session_loop_guard.py +0 -0
  79. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/ports/outbound/session_manager.py +0 -0
  80. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/ports/outbound/session_repository.py +0 -0
  81. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/ports/outbound/shell_executor.py +0 -0
  82. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/ports/outbound/system_environment.py +0 -0
  83. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/ports/outbound/time_service.py +0 -0
  84. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/ports/outbound/user_interactor.py +0 -0
  85. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/ports/outbound/web_scraper.py +0 -0
  86. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/ports/outbound/web_searcher.py +0 -0
  87. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/services/__init__.py +0 -0
  88. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/services/action_changeset_builder.py +0 -0
  89. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/services/action_diff_manager.py +0 -0
  90. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/services/action_dispatcher.py +0 -0
  91. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/services/action_executor.py +0 -0
  92. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/services/action_factory.py +0 -0
  93. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/services/action_parser_complex.py +0 -0
  94. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/services/action_parser_strategies.py +0 -0
  95. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/services/context_service.py +0 -0
  96. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/services/edit_simulator.py +0 -0
  97. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/services/execution_orchestrator.py +0 -0
  98. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/services/execution_report_assembler.py +0 -0
  99. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/services/init_service.py +0 -0
  100. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/services/markdown_plan_parser.py +0 -0
  101. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/services/markdown_report_formatter.py +0 -0
  102. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/services/parser_infrastructure.py +0 -0
  103. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/services/parser_metadata.py +0 -0
  104. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/services/parser_reporting.py +0 -0
  105. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/services/plan_validator.py +0 -0
  106. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/services/planning_service.py +0 -0
  107. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/services/prompt_manager.py +0 -0
  108. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/services/session_lifecycle_manager.py +0 -0
  109. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/services/session_loop_guard.py +0 -0
  110. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/services/session_orchestrator.py +0 -0
  111. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/services/session_planner.py +0 -0
  112. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/services/session_pruning_service.py +0 -0
  113. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/services/session_replanner.py +0 -0
  114. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/services/session_repository.py +0 -0
  115. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/services/session_service.py +0 -0
  116. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/services/templates/execution_report.md.j2 +0 -0
  117. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/services/update_checker.py +0 -0
  118. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/services/validation_rules/__init__.py +0 -0
  119. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/services/validation_rules/edit.py +0 -0
  120. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/services/validation_rules/edit_matcher.py +0 -0
  121. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/services/validation_rules/edit_matcher_heuristics.py +0 -0
  122. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/services/validation_rules/execute.py +0 -0
  123. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/services/validation_rules/filesystem.py +0 -0
  124. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/services/validation_rules/helpers.py +0 -0
  125. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/services/validation_rules/message.py +0 -0
  126. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/utils/__init__.py +0 -0
  127. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/utils/diff.py +0 -0
  128. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/utils/interrupt_guard.py +0 -0
  129. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/utils/io.py +0 -0
  130. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/utils/markdown.py +0 -0
  131. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/utils/paths.py +0 -0
  132. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/utils/serialization.py +0 -0
  133. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/utils/session_notices.py +0 -0
  134. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/utils/stdin_ownership.py +0 -0
  135. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/utils/string.py +0 -0
  136. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/core/utils/terminal.py +0 -0
  137. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/prompts.py +0 -0
  138. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/registries/__init__.py +0 -0
  139. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/registries/infrastructure.py +0 -0
  140. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/registries/reviewer.py +0 -0
  141. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/registries/validators.py +0 -0
  142. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/resources/MRP.md +0 -0
  143. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/resources/__init__.py +0 -0
  144. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/resources/config/__init__.py +0 -0
  145. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/resources/config/config.yaml +0 -0
  146. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/resources/config/init.context +0 -0
  147. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/resources/config/prompts/architect.md +0 -0
  148. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/resources/config/prompts/assistant.md +0 -0
  149. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/resources/config/prompts/debugger.md +0 -0
  150. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/resources/config/prompts/developer.md +0 -0
  151. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/resources/config/prompts/pathfinder.md +0 -0
  152. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/resources/config/prompts/prototyper.md +0 -0
  153. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/resources/templates/ARCHITECTURE.md +0 -0
  154. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/resources/templates/PROJECT.md +0 -0
  155. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/resources/templates/case-file.md +0 -0
  156. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/resources/templates/ci.md +0 -0
  157. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/resources/templates/component-design.md +0 -0
  158. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/resources/templates/makefile.md +0 -0
  159. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/resources/templates/milestone.md +0 -0
  160. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/resources/templates/pre-commit.md +0 -0
  161. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/src/teddy_executor/resources/templates/specification-document.md +0 -0
  162. {teddy_cli-0.1.17.dev1302 → teddy_cli-0.1.17.dev1303}/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.dev1302
3
+ Version: 0.1.17.dev1303
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.dev1302"
3
+ version = "0.1.17.dev1303"
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 = [
@@ -241,6 +241,71 @@ def _run_health_checks() -> None:
241
241
  _check_git_initialized()
242
242
 
243
243
 
244
+ def _start_background_update_check(container: Container) -> list[str]:
245
+ """Start the non-blocking version check and report the update-check keys.
246
+
247
+ Both session entry points share this preamble: it spawns the daemon
248
+ version-fetch thread, then emits the cached update notification (if any).
249
+ The returned list names the checks that fired so the shared disable-footer
250
+ can report them.
251
+ """
252
+ import threading
253
+
254
+ cache_path = find_project_root() / ".teddy" / ".update_cache.json"
255
+ thread = threading.Thread(
256
+ target=background_check,
257
+ args=(cache_path,),
258
+ daemon=True,
259
+ )
260
+ thread.start()
261
+ return _display_update_notification(container, cache_path)
262
+
263
+
264
+ def _run_startup_preamble(
265
+ container: Container,
266
+ fired: list[str],
267
+ agent: Optional[str] = None,
268
+ setup_editor: Optional[bool] = None,
269
+ setup_api_key: Optional[bool] = None,
270
+ ) -> None:
271
+ """Run the shared startup preamble for both session entry points.
272
+
273
+ The order is fixed so the banner layout cannot drift: health checks, the
274
+ ``Checking configurations...`` line, the preflight check (whose returned
275
+ keys extend ``fired``), then the shared disable-footer. ``start`` forwards
276
+ its ``agent`` so the preflight validates the agent prompt; ``resume``
277
+ leaves it ``None`` and validates no agent.
278
+ """
279
+ _run_health_checks()
280
+ typer.echo("Checking configurations...", err=True)
281
+ fired.extend(
282
+ _run_cli_preflight_check(
283
+ container,
284
+ agent=agent,
285
+ setup_editor=setup_editor,
286
+ setup_api_key=setup_api_key,
287
+ )
288
+ )
289
+ _display_checks_footer(fired)
290
+
291
+
292
+ def _handle_startup_error(container: Container, error: Exception) -> None:
293
+ """Print a startup error and exit with code 1 (shared by both entry points).
294
+
295
+ A ``ConfigurationError`` additionally prints the configuration path hint.
296
+ """
297
+ from teddy_executor.core.domain.models.exceptions import ConfigurationError
298
+
299
+ if isinstance(error, ConfigurationError):
300
+ config_service = container.resolve(IConfigService)
301
+ config_path = config_service.get_config_path()
302
+ typer.echo(f"Error: {error}", err=True)
303
+ typer.echo(f"Please update your configuration at: {config_path}", err=True)
304
+ else:
305
+ typer.echo(f"Error: {error}", err=True)
306
+ raise typer.Exit(code=1)
307
+
308
+
244
309
  def _determine_session_name(name: Optional[str], message: Optional[str]) -> str:
245
310
  """Determine session name (slugify message if name is missing)."""
246
311
  if name:
@@ -565,17 +630,7 @@ def handle_new_session( # noqa: PLR0913
565
630
  setup_api_key: Optional[bool] = None,
566
631
  ):
567
632
  """Logic for the 'start' command."""
568
- import threading
569
-
570
- # Start non-blocking background version check
571
- cache_path = find_project_root() / ".teddy" / ".update_cache.json"
572
- thread = threading.Thread(
573
- target=background_check,
574
- args=(cache_path,),
575
- daemon=True,
576
- )
577
- thread.start()
578
- fired = _display_update_notification(container, cache_path)
633
+ fired = _start_background_update_check(container)
579
634
 
580
635
  try:
581
636
  # 0. Pipeline mode requires an initial message
@@ -587,20 +642,14 @@ def handle_new_session( # noqa: PLR0913
587
642
  # 1. Ensure project is initialized
588
643
  container.resolve(IInitUseCase).ensure_initialized()
589
644
 
590
- # 2. Health checks (advisory, non-blocking)
591
- _run_health_checks()
592
-
593
- # 2. Pre-flight checks (Fail-fast before user interaction)
594
- typer.echo("Checking configurations...", err=True)
595
- fired.extend(
596
- _run_cli_preflight_check(
597
- container,
598
- agent=agent,
599
- setup_editor=setup_editor,
600
- setup_api_key=setup_api_key,
601
- )
645
+ # 2. Shared startup preamble (health checks + preflight + footer)
646
+ _run_startup_preamble(
647
+ container,
648
+ fired,
649
+ agent=agent,
650
+ setup_editor=setup_editor,
651
+ setup_api_key=setup_api_key,
602
652
  )
603
- _display_checks_footer(fired)
604
653
  _echo_config_success(container, agent, model=model)
605
654
 
606
655
  session_manager: ISessionManager = container.resolve(ISessionManager)
@@ -635,18 +684,7 @@ def handle_new_session( # noqa: PLR0913
635
684
  )
636
685
 
637
686
  except Exception as e:
638
- from teddy_executor.core.domain.models.exceptions import ConfigurationError
639
-
640
- if isinstance(e, ConfigurationError):
641
- from teddy_executor.core.ports.outbound.config_service import IConfigService
642
-
643
- config_service = container.resolve(IConfigService)
644
- config_path = config_service.get_config_path()
645
- typer.echo(f"Error: {e}", err=True)
646
- typer.echo(f"Please update your configuration at: {config_path}", err=True)
647
- else:
648
- typer.echo(f"Error: {e}", err=True)
649
- raise typer.Exit(code=1)
687
+ _handle_startup_error(container, e)
650
688
 
651
689
 
652
690
  def _echo_config_success(
@@ -1109,32 +1147,16 @@ def handle_resume_session( # noqa: PLR0913
1109
1147
  setup_api_key: Optional[bool] = None,
1110
1148
  ):
1111
1149
  """Logic for the 'resume' command."""
1112
- import threading
1113
-
1114
- # Start non-blocking background version check
1115
- cache_path = find_project_root() / ".teddy" / ".update_cache.json"
1116
- thread = threading.Thread(
1117
- target=background_check,
1118
- args=(cache_path,),
1119
- daemon=True,
1120
- )
1121
- thread.start()
1122
- fired = _display_update_notification(container, cache_path)
1150
+ fired = _start_background_update_check(container)
1123
1151
 
1124
1152
  try:
1125
- # 1. Health checks (advisory, non-blocking)
1126
- _run_health_checks()
1127
-
1128
- # 2. Pre-flight checks
1129
- typer.echo("Checking configurations...", err=True)
1130
- fired.extend(
1131
- _run_cli_preflight_check(
1132
- container,
1133
- setup_editor=setup_editor,
1134
- setup_api_key=setup_api_key,
1135
- )
1153
+ # 1. Shared startup preamble (health checks + preflight + footer)
1154
+ _run_startup_preamble(
1155
+ container,
1156
+ fired,
1157
+ setup_editor=setup_editor,
1158
+ setup_api_key=setup_api_key,
1136
1159
  )
1137
- _display_checks_footer(fired)
1138
1160
 
1139
1161
  # 2. Resolve session name
1140
1162
  session_name = _resolve_session_name(container, path)
@@ -1146,7 +1168,7 @@ def handle_resume_session( # noqa: PLR0913
1146
1168
 
1147
1169
  # 4. Display session path (below the Agent/Model identity block)
1148
1170
  session_relative_path = str(Path(".teddy") / "sessions" / session_name)
1149
- typer.echo(f"\nResuming session: {session_relative_path}")
1171
+ typer.echo(f"Resuming session: {session_relative_path}")
1150
1172
 
1151
1173
  # 5. Agent switch: if -a/--agent provided, update session agent permanently
1152
1174
  if agent:
@@ -1163,15 +1185,4 @@ def handle_resume_session( # noqa: PLR0913
1163
1185
  )
1164
1186
 
1165
1187
  except Exception as e:
1166
- from teddy_executor.core.domain.models.exceptions import ConfigurationError
1167
-
1168
- if isinstance(e, ConfigurationError):
1169
- from teddy_executor.core.ports.outbound.config_service import IConfigService
1170
-
1171
- config_service = container.resolve(IConfigService)
1172
- config_path = config_service.get_config_path()
1173
- typer.echo(f"Error: {e}", err=True)
1174
- typer.echo(f"Please update your configuration at: {config_path}", err=True)
1175
- else:
1176
- typer.echo(f"Error: {e}", err=True)
1177
- raise typer.Exit(code=1)
1188
+ _handle_startup_error(container, e)