teddy-cli 0.1.17.dev1424__tar.gz → 0.1.17.dev1425__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.dev1424 → teddy_cli-0.1.17.dev1425}/PKG-INFO +1 -1
  2. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/pyproject.toml +1 -1
  3. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/adapters/inbound/session_cli_handlers.py +45 -69
  4. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/.gitignore +0 -0
  5. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/LICENSE +0 -0
  6. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/README.md +0 -0
  7. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/__init__.py +0 -0
  8. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/__main__.py +0 -0
  9. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/adapters/__init__.py +0 -0
  10. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/adapters/inbound/__init__.py +0 -0
  11. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/adapters/inbound/cli_formatter.py +0 -0
  12. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/adapters/inbound/cli_helpers.py +0 -0
  13. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/adapters/inbound/textual_plan_reviewer.py +0 -0
  14. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_app.py +0 -0
  15. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_editor.py +0 -0
  16. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_execution.py +0 -0
  17. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_helpers.py +0 -0
  18. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_logic.py +0 -0
  19. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_previews.py +0 -0
  20. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_widgets.py +0 -0
  21. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/adapters/outbound/__init__.py +0 -0
  22. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/adapters/outbound/console_interactor.py +0 -0
  23. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/adapters/outbound/console_interactor_ask_loop.py +0 -0
  24. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/adapters/outbound/console_interactor_helpers.py +0 -0
  25. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/adapters/outbound/console_tooling.py +0 -0
  26. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/adapters/outbound/filesystem_helpers.py +0 -0
  27. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/adapters/outbound/litellm_adapter.py +0 -0
  28. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/adapters/outbound/local_file_system_adapter.py +0 -0
  29. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/adapters/outbound/local_repo_tree_generator.py +0 -0
  30. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/adapters/outbound/openrouter_hydrator.py +0 -0
  31. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/adapters/outbound/shell_adapter.py +0 -0
  32. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/adapters/outbound/shell_command_builder.py +0 -0
  33. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/adapters/outbound/suppressed_logging.py +0 -0
  34. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/adapters/outbound/system_environment_adapter.py +0 -0
  35. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/adapters/outbound/system_environment_inspector.py +0 -0
  36. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/adapters/outbound/system_time_adapter.py +0 -0
  37. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/adapters/outbound/terminal_quit_key_listener.py +0 -0
  38. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/adapters/outbound/web_scraper_adapter.py +0 -0
  39. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/adapters/outbound/web_searcher_adapter.py +0 -0
  40. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/adapters/outbound/yaml_config_adapter.py +0 -0
  41. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/container.py +0 -0
  42. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/__init__.py +0 -0
  43. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/domain/__init__.py +0 -0
  44. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/domain/models/__init__.py +0 -0
  45. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/domain/models/action_ports.py +0 -0
  46. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/domain/models/change_set.py +0 -0
  47. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/domain/models/config_schema.py +0 -0
  48. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/domain/models/drift_report.py +0 -0
  49. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/domain/models/exceptions.py +0 -0
  50. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/domain/models/execution_report.py +0 -0
  51. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/domain/models/orchestrator_ports.py +0 -0
  52. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/domain/models/plan.py +0 -0
  53. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/domain/models/planning_ports.py +0 -0
  54. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/domain/models/project_context.py +0 -0
  55. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/domain/models/report_assembly_data.py +0 -0
  56. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/domain/models/session.py +0 -0
  57. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/domain/models/shell_output.py +0 -0
  58. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/domain/models/web_search_results.py +0 -0
  59. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/ports/__init__.py +0 -0
  60. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/ports/inbound/__init__.py +0 -0
  61. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/ports/inbound/edit_simulator.py +0 -0
  62. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/ports/inbound/get_context_use_case.py +0 -0
  63. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/ports/inbound/init.py +0 -0
  64. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/ports/inbound/plan_parser.py +0 -0
  65. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/ports/inbound/plan_reviewer.py +0 -0
  66. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/ports/inbound/plan_validator.py +0 -0
  67. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/ports/inbound/planning_use_case.py +0 -0
  68. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/ports/inbound/run_plan_use_case.py +0 -0
  69. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/ports/outbound/__init__.py +0 -0
  70. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/ports/outbound/config_service.py +0 -0
  71. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/ports/outbound/environment_inspector.py +0 -0
  72. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/ports/outbound/execution_report_assembler.py +0 -0
  73. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/ports/outbound/file_system_manager.py +0 -0
  74. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/ports/outbound/llm_client.py +0 -0
  75. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/ports/outbound/markdown_report_formatter.py +0 -0
  76. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/ports/outbound/prompt_manager.py +0 -0
  77. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/ports/outbound/quit_key_listener.py +0 -0
  78. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/ports/outbound/repo_tree_generator.py +0 -0
  79. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/ports/outbound/session_loop_guard.py +0 -0
  80. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/ports/outbound/session_manager.py +0 -0
  81. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/ports/outbound/session_repository.py +0 -0
  82. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/ports/outbound/shell_executor.py +0 -0
  83. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/ports/outbound/system_environment.py +0 -0
  84. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/ports/outbound/time_service.py +0 -0
  85. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/ports/outbound/user_interactor.py +0 -0
  86. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/ports/outbound/web_scraper.py +0 -0
  87. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/ports/outbound/web_searcher.py +0 -0
  88. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/services/__init__.py +0 -0
  89. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/services/action_changeset_builder.py +0 -0
  90. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/services/action_diff_manager.py +0 -0
  91. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/services/action_dispatcher.py +0 -0
  92. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/services/action_executor.py +0 -0
  93. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/services/action_factory.py +0 -0
  94. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/services/action_parser_complex.py +0 -0
  95. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/services/action_parser_strategies.py +0 -0
  96. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/services/context_service.py +0 -0
  97. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/services/edit_simulator.py +0 -0
  98. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/services/execution_orchestrator.py +0 -0
  99. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/services/execution_report_assembler.py +0 -0
  100. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/services/init_service.py +0 -0
  101. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/services/markdown_plan_parser.py +0 -0
  102. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/services/markdown_report_formatter.py +0 -0
  103. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/services/parser_infrastructure.py +0 -0
  104. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/services/parser_metadata.py +0 -0
  105. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/services/parser_reporting.py +0 -0
  106. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/services/plan_validator.py +0 -0
  107. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/services/planning_service.py +0 -0
  108. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/services/prompt_manager.py +0 -0
  109. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/services/session_lifecycle_manager.py +0 -0
  110. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/services/session_loop_guard.py +0 -0
  111. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/services/session_orchestrator.py +0 -0
  112. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/services/session_planner.py +0 -0
  113. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/services/session_pruning_service.py +0 -0
  114. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/services/session_replanner.py +0 -0
  115. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/services/session_repository.py +0 -0
  116. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/services/session_service.py +0 -0
  117. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/services/templates/execution_report.md.j2 +0 -0
  118. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/services/update_checker.py +0 -0
  119. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/services/validation_rules/__init__.py +0 -0
  120. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/services/validation_rules/edit.py +0 -0
  121. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/services/validation_rules/edit_matcher.py +0 -0
  122. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/services/validation_rules/edit_matcher_heuristics.py +0 -0
  123. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/services/validation_rules/execute.py +0 -0
  124. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/services/validation_rules/filesystem.py +0 -0
  125. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/services/validation_rules/helpers.py +0 -0
  126. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/services/validation_rules/message.py +0 -0
  127. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/utils/__init__.py +0 -0
  128. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/utils/diff.py +0 -0
  129. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/utils/editor_names.py +0 -0
  130. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/utils/interrupt_guard.py +0 -0
  131. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/utils/interruptible_call.py +0 -0
  132. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/utils/io.py +0 -0
  133. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/utils/markdown.py +0 -0
  134. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/utils/paths.py +0 -0
  135. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/utils/serialization.py +0 -0
  136. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/utils/session_notices.py +0 -0
  137. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/utils/stdin_ownership.py +0 -0
  138. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/utils/string.py +0 -0
  139. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/core/utils/terminal.py +0 -0
  140. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/prompts.py +0 -0
  141. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/registries/__init__.py +0 -0
  142. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/registries/infrastructure.py +0 -0
  143. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/registries/reviewer.py +0 -0
  144. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/registries/validators.py +0 -0
  145. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/resources/MRP.md +0 -0
  146. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/resources/__init__.py +0 -0
  147. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/resources/config/__init__.py +0 -0
  148. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/resources/config/config.yaml +0 -0
  149. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/resources/config/init.context +0 -0
  150. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/resources/config/prompts/architect.md +0 -0
  151. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/resources/config/prompts/assistant.md +0 -0
  152. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/resources/config/prompts/debugger.md +0 -0
  153. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/resources/config/prompts/developer.md +0 -0
  154. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/resources/config/prompts/pathfinder.md +0 -0
  155. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/resources/config/prompts/prototyper.md +0 -0
  156. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/resources/templates/ARCHITECTURE.md +0 -0
  157. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/resources/templates/PROJECT.md +0 -0
  158. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/resources/templates/case-file.md +0 -0
  159. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/resources/templates/ci.md +0 -0
  160. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/resources/templates/component-design.md +0 -0
  161. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/resources/templates/makefile.md +0 -0
  162. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/resources/templates/milestone.md +0 -0
  163. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/resources/templates/pre-commit.md +0 -0
  164. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/src/teddy_executor/resources/templates/specification-document.md +0 -0
  165. {teddy_cli-0.1.17.dev1424 → teddy_cli-0.1.17.dev1425}/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.dev1424
3
+ Version: 0.1.17.dev1425
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.dev1424"
3
+ version = "0.1.17.dev1425"
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 = [
@@ -245,49 +245,29 @@ def _check_git_initialized() -> None:
245
245
  )
246
246
 
247
247
 
248
- def _warn_disabled_workspace_steps(config_service: IConfigService) -> None:
249
- """Print one warning per disabled workspace step with a real consequence.
250
-
251
- A disabled hook installer warns because the unskippable post-commit test
252
- gate then depends on a hook that never landed. A disabled git init warns
253
- only when the workspace is not already a repository, because an existing
254
- repository needs no initialization.
255
- """
256
- if not config_service.get_setting("workspace.pre-commit", True):
257
- typer.secho(
258
- "⚠ Pre-commit hook installation is disabled. "
259
- "The post-commit test gate will not run.",
260
- fg=typer.colors.YELLOW,
261
- err=True,
262
- )
263
- init_disabled = not config_service.get_setting("workspace.init", True)
264
- if init_disabled and not (Path.cwd() / ".git").exists():
265
- typer.secho(
266
- "⚠ Git repository not initialized. Version control actions will fail.",
267
- fg=typer.colors.YELLOW,
268
- err=True,
269
- )
270
-
271
-
272
248
  def _run_health_checks(config_service: IConfigService) -> None:
273
249
  """Run each startup health check the workspace toggles allow.
274
250
 
275
- A disabled step is skipped, and ``_warn_disabled_workspace_steps`` reports
276
- the ones that carry a real consequence.
251
+ A disabled step is skipped without a warning, because the setting is the
252
+ user's own choice and needs no reminder.
277
253
  """
278
254
  if config_service.get_setting("workspace.pre-commit", True):
279
255
  _ensure_commit_hooks()
280
256
  if config_service.get_setting("workspace.init", True):
281
257
  _check_git_initialized()
282
- _warn_disabled_workspace_steps(config_service)
283
258
 
284
259
 
285
260
  _GIT_PULL_TIMEOUT_SECONDS = 15
286
- _PULL_SKIPPED_WARNING = "⚠ Workspace pull skipped."
287
- _PULL_TIMEOUT_WARNING = "⚠ Workspace pull timed out."
288
- _PULL_GIT_UNAVAILABLE_WARNING = "⚠ Workspace pull skipped; git is unavailable."
261
+ _PULL_DETACHED_HEAD_WARNING = "⚠ Workspace pull skipped: detached HEAD."
262
+ _PULL_NO_UPSTREAM_WARNING = "⚠ Workspace pull skipped: no upstream branch."
263
+ _PULL_IN_PROGRESS_WARNING = "⚠ Workspace pull skipped: Git operation in progress."
264
+ _PULL_NOT_A_REPOSITORY_WARNING = "⚠ Workspace pull skipped: not a Git repository."
265
+ _PULL_FAILED_WARNING = "⚠ Workspace pull failed."
266
+ _PULL_GIT_UNAVAILABLE_WARNING = "⚠ Workspace pull failed: git is unavailable."
267
+ _PULL_TIMEOUT_WARNING = (
268
+ f"⚠ Workspace pull timed out after {_GIT_PULL_TIMEOUT_SECONDS}s."
269
+ )
289
270
  _PULL_UP_TO_DATE_NOTICE = "✓ Workspace up-to-date with remote"
290
- _PULL_SKIPPED_NOTICE = "✓ Workspace pull skipped"
291
271
  _IN_PROGRESS_GIT_MARKERS = (
292
272
  "rebase-merge",
293
273
  "rebase-apply",
@@ -305,30 +285,21 @@ def _warn_pull(message: str) -> None:
305
285
  typer.secho(message, fg=typer.colors.YELLOW, err=True)
306
286
 
307
287
 
308
- def _notice_pull(message: str) -> None:
309
- """Print one green pull notice.
310
-
311
- The checkmark line joins the startup block, so it carries no trailing
312
- blank and never uses the warning color.
313
- """
314
- typer.secho(message, fg=typer.colors.GREEN, err=True)
315
-
316
-
317
288
  def _pull_workspace_on_start(
318
289
  config_service: IConfigService,
319
290
  run_func: Optional[Callable[..., Any]] = None,
320
291
  ) -> None:
321
292
  """Fast-forward the workspace before starting a new session.
322
293
 
323
- The pull runs only when ``workspace.pull`` is enabled and the workspace is
324
- a Git repository, so a disabled toggle or a non-repository directory stays
325
- silent. A detached HEAD, a missing upstream, or an in-progress operation
326
- reports one generic checkmark notice, because the user needs a pull outcome
327
- on every run without the diagnostic detail. A dirty worktree, a failed
328
- pull, a timeout, or an unavailable git binary reports one warning and
329
- leaves the workspace unchanged. A successful fast-forward names the number
330
- of commits it moved, and a pull that moves no commit confirms the workspace
331
- is up to date.
294
+ The pull runs only when ``workspace.pull`` is enabled, so a disabled toggle
295
+ stays silent because the user opted out. Every other outcome warns once and
296
+ names its cause, so a skipped or failed pull never carries a checkmark. A
297
+ detached HEAD, a missing upstream, an in-progress operation, a dirty
298
+ worktree, or a missing repository reports why the workspace stayed
299
+ unchanged. A failed pull, a timeout, or an unavailable git binary reports
300
+ the failure. A successful fast-forward names the number of commits it
301
+ moved, and a pull that moves no commit confirms the workspace is up to
302
+ date.
332
303
 
333
304
  The Git process is injected through ``run_func`` so every decision is
334
305
  testable without spawning a real repository.
@@ -336,6 +307,7 @@ def _pull_workspace_on_start(
336
307
  if not config_service.get_setting("workspace.pull", True):
337
308
  return
338
309
  if not (Path.cwd() / ".git").exists():
310
+ _warn_pull(_PULL_NOT_A_REPOSITORY_WARNING)
339
311
  return
340
312
  git_run = run_func or subprocess.run
341
313
  try:
@@ -350,16 +322,12 @@ def _fast_forward_workspace(git_run: Callable[..., Any]) -> None:
350
322
  """Run the pull decision table through the injected Git runner.
351
323
 
352
324
  Each precondition is probed before the pull so an unsafe state never
353
- reaches ``git pull``. A dirty worktree reports one warning, while every
354
- other unsafe state reports one generic checkmark notice so the user always
355
- sees a pull outcome.
325
+ reaches ``git pull``. Every skip reports its cause as one warning, so the
326
+ user always sees a pull outcome.
356
327
  """
357
- skip = _pull_skip_reason(git_run)
358
- if skip is not None:
359
- if skip:
360
- _warn_pull(_PULL_SKIPPED_WARNING)
361
- else:
362
- _notice_pull(_PULL_SKIPPED_NOTICE)
328
+ skip_message = _pull_skip_message(git_run)
329
+ if skip_message is not None:
330
+ _warn_pull(skip_message)
363
331
  return
364
332
  before = _read_head(git_run)
365
333
  result = git_run(
@@ -370,52 +338,60 @@ def _fast_forward_workspace(git_run: Callable[..., Any]) -> None:
370
338
  timeout=_GIT_PULL_TIMEOUT_SECONDS,
371
339
  )
372
340
  if result.returncode != 0:
373
- _warn_pull(_PULL_SKIPPED_WARNING)
341
+ _warn_pull(_PULL_FAILED_WARNING)
374
342
  return
375
343
  _report_fast_forward(git_run, before, _read_head(git_run))
376
344
 
377
345
 
378
- def _pull_skip_reason(git_run: Callable[..., Any]) -> Optional[bool]:
379
- """Return the skip severity, or None when the pull may proceed.
346
+ def _pull_skip_message(git_run: Callable[..., Any]) -> Optional[str]:
347
+ """Return the warning text for a skip, or None when the pull may proceed.
380
348
 
381
- Every skip prints one generic notice, so the caller only needs to know
382
- whether an attention-worthy warning replaces it. The boolean marks a
383
- warning (``True``) versus a checkmark notice (``False``). A dirty worktree
384
- returns the warning, because tracked changes can conflict.
349
+ Every skip names its own cause, because the user needs to know why the
350
+ workspace stayed unchanged. A dirty worktree reports how many tracked
351
+ files block the fast-forward.
385
352
  """
386
353
  git_dir = Path.cwd() / ".git"
387
354
  if any((git_dir / marker).exists() for marker in _IN_PROGRESS_GIT_MARKERS):
388
- return False
355
+ return _PULL_IN_PROGRESS_WARNING
389
356
  detached = git_run(
390
357
  ["git", "symbolic-ref", "-q", "HEAD"],
391
358
  capture_output=True,
392
359
  timeout=_GIT_PULL_TIMEOUT_SECONDS,
393
360
  )
394
361
  if detached.returncode != 0:
395
- return False
362
+ return _PULL_DETACHED_HEAD_WARNING
396
363
  upstream = git_run(
397
364
  ["git", "rev-parse", "--abbrev-ref", "--symbolic-full-name", "@{u}"],
398
365
  capture_output=True,
399
366
  timeout=_GIT_PULL_TIMEOUT_SECONDS,
400
367
  )
401
368
  if upstream.returncode != 0:
402
- return False
369
+ return _PULL_NO_UPSTREAM_WARNING
403
370
  status = git_run(
404
371
  ["git", "status", "--porcelain"],
405
372
  capture_output=True,
406
373
  text=True,
407
374
  timeout=_GIT_PULL_TIMEOUT_SECONDS,
408
375
  )
376
+ # Porcelain prints exactly one line per tracked path, so the line count is
377
+ # the file count. A path that is both staged and modified still yields one
378
+ # line with two status columns.
409
379
  tracked_changes = [
410
380
  line
411
381
  for line in status.stdout.splitlines()
412
382
  if line and not line.startswith("??")
413
383
  ]
414
384
  if tracked_changes:
415
- return True
385
+ return _format_uncommitted_warning(len(tracked_changes))
416
386
  return None
417
387
 
418
388
 
389
+ def _format_uncommitted_warning(count: int) -> str:
390
+ """Name how many tracked files block the fast-forward."""
391
+ noun = "file" if count == 1 else "files"
392
+ return f"⚠ Workspace pull skipped: {count} uncommitted {noun}."
393
+
394
+
419
395
  def _read_head(git_run: Callable[..., Any]) -> str:
420
396
  """Read the current commit id through the injected Git runner."""
421
397
  return git_run(