teddy-cli 0.1.17.dev1349__tar.gz → 0.1.17.dev1351__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.dev1349 → teddy_cli-0.1.17.dev1351}/PKG-INFO +1 -1
  2. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/pyproject.toml +1 -1
  3. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/adapters/inbound/session_cli_handlers.py +9 -9
  4. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/adapters/outbound/system_environment_inspector.py +2 -18
  5. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/domain/models/project_context.py +1 -1
  6. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/ports/outbound/environment_inspector.py +2 -11
  7. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/services/context_service.py +18 -7
  8. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/.gitignore +0 -0
  9. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/LICENSE +0 -0
  10. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/README.md +0 -0
  11. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/__init__.py +0 -0
  12. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/__main__.py +0 -0
  13. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/adapters/__init__.py +0 -0
  14. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/adapters/inbound/__init__.py +0 -0
  15. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/adapters/inbound/cli_formatter.py +0 -0
  16. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/adapters/inbound/cli_helpers.py +0 -0
  17. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/adapters/inbound/textual_plan_reviewer.py +0 -0
  18. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_app.py +0 -0
  19. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_editor.py +0 -0
  20. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_execution.py +0 -0
  21. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_helpers.py +0 -0
  22. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_logic.py +0 -0
  23. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_previews.py +0 -0
  24. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_widgets.py +0 -0
  25. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/adapters/outbound/__init__.py +0 -0
  26. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/adapters/outbound/console_interactor.py +0 -0
  27. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/adapters/outbound/console_interactor_ask_loop.py +0 -0
  28. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/adapters/outbound/console_interactor_helpers.py +0 -0
  29. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/adapters/outbound/console_tooling.py +0 -0
  30. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/adapters/outbound/filesystem_helpers.py +0 -0
  31. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/adapters/outbound/litellm_adapter.py +0 -0
  32. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/adapters/outbound/local_file_system_adapter.py +0 -0
  33. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/adapters/outbound/local_repo_tree_generator.py +0 -0
  34. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/adapters/outbound/openrouter_hydrator.py +0 -0
  35. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/adapters/outbound/shell_adapter.py +0 -0
  36. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/adapters/outbound/shell_command_builder.py +0 -0
  37. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/adapters/outbound/suppressed_logging.py +0 -0
  38. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/adapters/outbound/system_environment_adapter.py +0 -0
  39. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/adapters/outbound/system_time_adapter.py +0 -0
  40. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/adapters/outbound/terminal_quit_key_listener.py +0 -0
  41. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/adapters/outbound/web_scraper_adapter.py +0 -0
  42. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/adapters/outbound/web_searcher_adapter.py +0 -0
  43. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/adapters/outbound/yaml_config_adapter.py +0 -0
  44. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/container.py +0 -0
  45. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/__init__.py +0 -0
  46. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/domain/__init__.py +0 -0
  47. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/domain/models/__init__.py +0 -0
  48. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/domain/models/action_ports.py +0 -0
  49. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/domain/models/change_set.py +0 -0
  50. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/domain/models/drift_report.py +0 -0
  51. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/domain/models/exceptions.py +0 -0
  52. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/domain/models/execution_report.py +0 -0
  53. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/domain/models/orchestrator_ports.py +0 -0
  54. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/domain/models/plan.py +0 -0
  55. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/domain/models/planning_ports.py +0 -0
  56. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/domain/models/report_assembly_data.py +0 -0
  57. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/domain/models/session.py +0 -0
  58. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/domain/models/shell_output.py +0 -0
  59. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/domain/models/web_search_results.py +0 -0
  60. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/ports/__init__.py +0 -0
  61. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/ports/inbound/__init__.py +0 -0
  62. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/ports/inbound/edit_simulator.py +0 -0
  63. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/ports/inbound/get_context_use_case.py +0 -0
  64. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/ports/inbound/init.py +0 -0
  65. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/ports/inbound/plan_parser.py +0 -0
  66. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/ports/inbound/plan_reviewer.py +0 -0
  67. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/ports/inbound/plan_validator.py +0 -0
  68. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/ports/inbound/planning_use_case.py +0 -0
  69. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/ports/inbound/run_plan_use_case.py +0 -0
  70. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/ports/outbound/__init__.py +0 -0
  71. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/ports/outbound/config_service.py +0 -0
  72. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/ports/outbound/execution_report_assembler.py +0 -0
  73. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/ports/outbound/file_system_manager.py +0 -0
  74. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/ports/outbound/llm_client.py +0 -0
  75. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/ports/outbound/markdown_report_formatter.py +0 -0
  76. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/ports/outbound/prompt_manager.py +0 -0
  77. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/ports/outbound/quit_key_listener.py +0 -0
  78. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/ports/outbound/repo_tree_generator.py +0 -0
  79. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/ports/outbound/session_loop_guard.py +0 -0
  80. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/ports/outbound/session_manager.py +0 -0
  81. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/ports/outbound/session_repository.py +0 -0
  82. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/ports/outbound/shell_executor.py +0 -0
  83. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/ports/outbound/system_environment.py +0 -0
  84. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/ports/outbound/time_service.py +0 -0
  85. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/ports/outbound/user_interactor.py +0 -0
  86. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/ports/outbound/web_scraper.py +0 -0
  87. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/ports/outbound/web_searcher.py +0 -0
  88. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/services/__init__.py +0 -0
  89. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/services/action_changeset_builder.py +0 -0
  90. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/services/action_diff_manager.py +0 -0
  91. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/services/action_dispatcher.py +0 -0
  92. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/services/action_executor.py +0 -0
  93. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/services/action_factory.py +0 -0
  94. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/services/action_parser_complex.py +0 -0
  95. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/services/action_parser_strategies.py +0 -0
  96. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/services/edit_simulator.py +0 -0
  97. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/services/execution_orchestrator.py +0 -0
  98. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/services/execution_report_assembler.py +0 -0
  99. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/services/init_service.py +0 -0
  100. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/services/markdown_plan_parser.py +0 -0
  101. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/services/markdown_report_formatter.py +0 -0
  102. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/services/parser_infrastructure.py +0 -0
  103. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/services/parser_metadata.py +0 -0
  104. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/services/parser_reporting.py +0 -0
  105. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/services/plan_validator.py +0 -0
  106. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/services/planning_service.py +0 -0
  107. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/services/prompt_manager.py +0 -0
  108. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/services/session_lifecycle_manager.py +0 -0
  109. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/services/session_loop_guard.py +0 -0
  110. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/services/session_orchestrator.py +0 -0
  111. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/services/session_planner.py +0 -0
  112. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/services/session_pruning_service.py +0 -0
  113. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/services/session_replanner.py +0 -0
  114. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/services/session_repository.py +0 -0
  115. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/services/session_service.py +0 -0
  116. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/services/templates/execution_report.md.j2 +0 -0
  117. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/services/update_checker.py +0 -0
  118. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/services/validation_rules/__init__.py +0 -0
  119. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/services/validation_rules/edit.py +0 -0
  120. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/services/validation_rules/edit_matcher.py +0 -0
  121. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/services/validation_rules/edit_matcher_heuristics.py +0 -0
  122. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/services/validation_rules/execute.py +0 -0
  123. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/services/validation_rules/filesystem.py +0 -0
  124. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/services/validation_rules/helpers.py +0 -0
  125. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/services/validation_rules/message.py +0 -0
  126. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/utils/__init__.py +0 -0
  127. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/utils/diff.py +0 -0
  128. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/utils/interrupt_guard.py +0 -0
  129. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/utils/io.py +0 -0
  130. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/utils/markdown.py +0 -0
  131. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/utils/paths.py +0 -0
  132. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/utils/serialization.py +0 -0
  133. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/utils/session_notices.py +0 -0
  134. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/utils/stdin_ownership.py +0 -0
  135. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/utils/string.py +0 -0
  136. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/core/utils/terminal.py +0 -0
  137. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/prompts.py +0 -0
  138. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/registries/__init__.py +0 -0
  139. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/registries/infrastructure.py +0 -0
  140. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/registries/reviewer.py +0 -0
  141. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/registries/validators.py +0 -0
  142. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/resources/MRP.md +0 -0
  143. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/resources/__init__.py +0 -0
  144. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/resources/config/__init__.py +0 -0
  145. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/resources/config/config.yaml +0 -0
  146. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/resources/config/init.context +0 -0
  147. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/resources/config/prompts/architect.md +0 -0
  148. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/resources/config/prompts/assistant.md +0 -0
  149. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/resources/config/prompts/debugger.md +0 -0
  150. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/resources/config/prompts/developer.md +0 -0
  151. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/resources/config/prompts/pathfinder.md +0 -0
  152. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/resources/config/prompts/prototyper.md +0 -0
  153. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/resources/templates/ARCHITECTURE.md +0 -0
  154. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/resources/templates/PROJECT.md +0 -0
  155. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/resources/templates/case-file.md +0 -0
  156. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/resources/templates/ci.md +0 -0
  157. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/resources/templates/component-design.md +0 -0
  158. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/resources/templates/makefile.md +0 -0
  159. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/resources/templates/milestone.md +0 -0
  160. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/resources/templates/pre-commit.md +0 -0
  161. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/src/teddy_executor/resources/templates/specification-document.md +0 -0
  162. {teddy_cli-0.1.17.dev1349 → teddy_cli-0.1.17.dev1351}/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.dev1349
3
+ Version: 0.1.17.dev1351
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.dev1349"
3
+ version = "0.1.17.dev1351"
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 = [
@@ -727,7 +727,6 @@ def _echo_config_success(
727
727
  container: Container,
728
728
  agent: Optional[str] = None,
729
729
  model: Optional[str] = None,
730
- actual_model: Optional[str] = None,
731
730
  ) -> None:
732
731
  """Retrieves and echoes the active model and agent configuration on success.
733
732
 
@@ -736,13 +735,9 @@ def _echo_config_success(
736
735
  agent: Optional agent name to display.
737
736
  model: Optional model override from CLI. If provided, this takes
738
737
  precedence over the config file value.
739
- actual_model: Optional actual serving model from meta.yaml. If provided,
740
- this takes precedence over the model parameter.
741
738
  """
742
739
  config_service = container.resolve(IConfigService)
743
- if actual_model:
744
- resolved_model = actual_model
745
- elif model:
740
+ if model:
746
741
  resolved_model = model
747
742
  else:
748
743
  resolved_model = config_service.get_setting("llm.model", "unknown")
@@ -1149,13 +1144,18 @@ def _sync_and_display_session_meta(
1149
1144
 
1150
1145
  latest_turn_path = session_manager.get_latest_turn(session_name)
1151
1146
  meta = repository.load_meta(latest_turn_path)
1152
- # Clear actual_model so display falls through to current model (override or config)
1153
- meta.pop("actual_model", None)
1147
+
1148
+ changed = False
1149
+ # Clear actual_model so display falls through to current model (override or config).
1150
+ # A removed key must count as a change so the clear reaches disk without an override.
1151
+ if "actual_model" in meta:
1152
+ meta.pop("actual_model", None)
1153
+ changed = True
1154
+
1154
1155
  _echo_config_success(container, agent=agent or meta.get("agent_name"), model=model)
1155
1156
 
1156
1157
  # Sync latest turn's meta.yaml with current config model/overrides
1157
1158
  config_model = config_service.get_setting("llm.model", "unknown")
1158
- changed = False
1159
1159
  if model:
1160
1160
  meta["model"] = model
1161
1161
  changed = True
@@ -58,27 +58,11 @@ class SystemEnvironmentInspector(IEnvironmentInspector):
58
58
 
59
59
  def get_git_status(self) -> Optional[str]:
60
60
  """
61
- Gathers the current Git status of the working directory (short format).
61
+ Gathers the current Git status of the working directory in porcelain format.
62
62
  """
63
63
  try:
64
64
  result = self._run_func( # nosec B603 B607
65
- ["git", "status", "-s"],
66
- capture_output=True,
67
- text=True,
68
- check=True,
69
- stdin=subprocess.DEVNULL,
70
- )
71
- return result.stdout.rstrip() if result.stdout else ""
72
- except (subprocess.CalledProcessError, FileNotFoundError):
73
- return None
74
-
75
- def get_full_git_status(self) -> Optional[str]:
76
- """
77
- Gathers the full Git status of the working directory (including branch info).
78
- """
79
- try:
80
- result = self._run_func( # nosec B603 B607
81
- ["git", "status"],
65
+ ["git", "status", "--porcelain", "-b"],
82
66
  capture_output=True,
83
67
  text=True,
84
68
  check=True,
@@ -38,7 +38,7 @@ class ProjectContext:
38
38
  header: A string containing metadata about the context (e.g., CWD, OS).
39
39
  content: The main body of the context (e.g., file tree and contents).
40
40
  scoped_paths: A mapping of scope names (e.g., 'Turn', 'Session') to lists of file paths.
41
- git_status: An optional string containing the output of 'git status -s'.
41
+ git_status: An optional string containing the output of 'git status --porcelain -b'.
42
42
  items: Structured list of context files and metadata.
43
43
  agent_name: Name of the active agent.
44
44
  system_prompt_tokens: Token count of the system prompt.
@@ -22,18 +22,9 @@ class IEnvironmentInspector(Protocol):
22
22
 
23
23
  def get_git_status(self) -> Optional[str]:
24
24
  """
25
- Gathers the current Git status of the working directory (short format).
25
+ Gathers the current Git status of the working directory in porcelain format.
26
26
 
27
27
  Returns:
28
- Optional[str]: The output of 'git status -s' or None if not a git repo.
29
- """
30
- ...
31
-
32
- def get_full_git_status(self) -> Optional[str]:
33
- """
34
- Gathers the full Git status of the working directory (including branch info).
35
-
36
- Returns:
37
- Optional[str]: The output of 'git status' or None if not a git repo.
28
+ Optional[str]: The output of 'git status --porcelain -b', or None if not a git repo.
38
29
  """
39
30
  ...
@@ -53,8 +53,7 @@ class ContextService(IGetContextUseCase):
53
53
  Gathers all project context information by orchestrating its dependencies.
54
54
  """
55
55
  system_info = self._environment_inspector.get_environment_info()
56
- short_git_status = self._environment_inspector.get_git_status()
57
- full_git_status = self._environment_inspector.get_full_git_status()
56
+ git_status = self._environment_inspector.get_git_status()
58
57
  repo_tree = self._repo_tree_generator.generate_tree()
59
58
 
60
59
  scoped_paths, all_resolved_paths = self._resolve_scoped_paths(context_files)
@@ -101,7 +100,7 @@ class ContextService(IGetContextUseCase):
101
100
  web_cache = {}
102
101
 
103
102
  content = self._format_content(
104
- repo_tree, scoped_paths, file_contents, full_git_status
103
+ repo_tree, scoped_paths, file_contents, git_status
105
104
  )
106
105
  content_tokens = (
107
106
  self._llm_client.get_text_token_count(content) if include_tokens else 0
@@ -111,9 +110,9 @@ class ContextService(IGetContextUseCase):
111
110
  header=self._format_header(system_info, current_turn),
112
111
  content=content,
113
112
  scoped_paths=scoped_paths,
114
- git_status=full_git_status,
113
+ git_status=git_status,
115
114
  items=self._collect_items(
116
- scoped_paths, file_contents, short_git_status, include_tokens
115
+ scoped_paths, file_contents, git_status, include_tokens
117
116
  ),
118
117
  agent_name=agent_name,
119
118
  total_window=total_window,
@@ -301,7 +300,7 @@ class ContextService(IGetContextUseCase):
301
300
  return token_counts
302
301
 
303
302
  def _parse_git_status(self, git_status: Optional[str]) -> Dict[str, str]:
304
- """Parses git status -s output into a map of path -> status code."""
303
+ """Parses porcelain git status output into a map of path -> status code."""
305
304
  if not git_status:
306
305
  return {}
307
306
 
@@ -309,10 +308,17 @@ class ContextService(IGetContextUseCase):
309
308
  min_line_length = 4
310
309
  status_map = {}
311
310
  for line in git_status.splitlines():
311
+ # The porcelain branch header carries no file status.
312
+ if line.startswith("##"):
313
+ continue
312
314
  if len(line) >= min_line_length:
313
315
  code = line[:2].strip()
314
316
  path = line[3:].strip()
315
317
 
318
+ # A rename line reads "old -> new"; key the badge by the new path.
319
+ if " -> " in path:
320
+ path = path.split(" -> ", 1)[1]
321
+
316
322
  # Guideline: Map ?? to U (Untracked)
317
323
  if code == "??":
318
324
  code = "U"
@@ -356,9 +362,14 @@ class ContextService(IGetContextUseCase):
356
362
  workspace_paths = [p for p in all_paths if not is_session_file_path(p)]
357
363
  session_paths = [p for p in all_paths if is_session_file_path(p)]
358
364
 
365
+ git_status_body = (
366
+ embed_in_fence(git_status, "")
367
+ if isinstance(git_status, str) and git_status
368
+ else ""
369
+ )
359
370
  content_parts = [
360
371
  "\n## Git Status",
361
- git_status if isinstance(git_status, str) else "",
372
+ git_status_body,
362
373
  "\n## Project Structure",
363
374
  f"```\n{repo_tree}\n```",
364
375
  ]