teddy-cli 0.1.17.dev1257__tar.gz → 0.1.17.dev1259__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 (160) hide show
  1. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/PKG-INFO +1 -1
  2. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/pyproject.toml +1 -1
  3. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/adapters/inbound/session_cli_handlers.py +69 -41
  4. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/.gitignore +0 -0
  5. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/LICENSE +0 -0
  6. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/__init__.py +0 -0
  7. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/__main__.py +0 -0
  8. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/adapters/__init__.py +0 -0
  9. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/adapters/inbound/__init__.py +0 -0
  10. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/adapters/inbound/cli_formatter.py +0 -0
  11. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/adapters/inbound/cli_helpers.py +0 -0
  12. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/adapters/inbound/textual_plan_reviewer.py +0 -0
  13. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_app.py +0 -0
  14. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_editor.py +0 -0
  15. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_execution.py +0 -0
  16. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_helpers.py +0 -0
  17. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_logic.py +0 -0
  18. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_previews.py +0 -0
  19. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_widgets.py +0 -0
  20. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/adapters/outbound/__init__.py +0 -0
  21. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/adapters/outbound/console_interactor.py +0 -0
  22. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/adapters/outbound/console_interactor_ask_loop.py +0 -0
  23. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/adapters/outbound/console_interactor_helpers.py +0 -0
  24. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/adapters/outbound/console_tooling.py +0 -0
  25. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/adapters/outbound/filesystem_helpers.py +0 -0
  26. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/adapters/outbound/litellm_adapter.py +0 -0
  27. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/adapters/outbound/local_file_system_adapter.py +0 -0
  28. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/adapters/outbound/local_repo_tree_generator.py +0 -0
  29. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/adapters/outbound/openrouter_hydrator.py +0 -0
  30. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/adapters/outbound/shell_adapter.py +0 -0
  31. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/adapters/outbound/shell_command_builder.py +0 -0
  32. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/adapters/outbound/suppressed_logging.py +0 -0
  33. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/adapters/outbound/system_environment_adapter.py +0 -0
  34. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/adapters/outbound/system_environment_inspector.py +0 -0
  35. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/adapters/outbound/system_time_adapter.py +0 -0
  36. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/adapters/outbound/terminal_quit_key_listener.py +0 -0
  37. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/adapters/outbound/web_scraper_adapter.py +0 -0
  38. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/adapters/outbound/web_searcher_adapter.py +0 -0
  39. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/adapters/outbound/yaml_config_adapter.py +0 -0
  40. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/container.py +0 -0
  41. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/__init__.py +0 -0
  42. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/domain/__init__.py +0 -0
  43. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/domain/models/__init__.py +0 -0
  44. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/domain/models/action_ports.py +0 -0
  45. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/domain/models/change_set.py +0 -0
  46. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/domain/models/drift_report.py +0 -0
  47. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/domain/models/exceptions.py +0 -0
  48. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/domain/models/execution_report.py +0 -0
  49. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/domain/models/orchestrator_ports.py +0 -0
  50. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/domain/models/plan.py +0 -0
  51. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/domain/models/planning_ports.py +0 -0
  52. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/domain/models/project_context.py +0 -0
  53. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/domain/models/report_assembly_data.py +0 -0
  54. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/domain/models/session.py +0 -0
  55. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/domain/models/shell_output.py +0 -0
  56. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/domain/models/web_search_results.py +0 -0
  57. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/ports/__init__.py +0 -0
  58. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/ports/inbound/__init__.py +0 -0
  59. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/ports/inbound/edit_simulator.py +0 -0
  60. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/ports/inbound/get_context_use_case.py +0 -0
  61. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/ports/inbound/init.py +0 -0
  62. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/ports/inbound/plan_parser.py +0 -0
  63. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/ports/inbound/plan_reviewer.py +0 -0
  64. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/ports/inbound/plan_validator.py +0 -0
  65. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/ports/inbound/planning_use_case.py +0 -0
  66. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/ports/inbound/run_plan_use_case.py +0 -0
  67. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/ports/outbound/__init__.py +0 -0
  68. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/ports/outbound/config_service.py +0 -0
  69. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/ports/outbound/environment_inspector.py +0 -0
  70. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/ports/outbound/execution_report_assembler.py +0 -0
  71. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/ports/outbound/file_system_manager.py +0 -0
  72. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/ports/outbound/llm_client.py +0 -0
  73. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/ports/outbound/markdown_report_formatter.py +0 -0
  74. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/ports/outbound/prompt_manager.py +0 -0
  75. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/ports/outbound/quit_key_listener.py +0 -0
  76. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/ports/outbound/repo_tree_generator.py +0 -0
  77. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/ports/outbound/session_loop_guard.py +0 -0
  78. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/ports/outbound/session_manager.py +0 -0
  79. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/ports/outbound/session_repository.py +0 -0
  80. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/ports/outbound/shell_executor.py +0 -0
  81. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/ports/outbound/system_environment.py +0 -0
  82. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/ports/outbound/time_service.py +0 -0
  83. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/ports/outbound/user_interactor.py +0 -0
  84. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/ports/outbound/web_scraper.py +0 -0
  85. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/ports/outbound/web_searcher.py +0 -0
  86. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/services/__init__.py +0 -0
  87. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/services/action_changeset_builder.py +0 -0
  88. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/services/action_diff_manager.py +0 -0
  89. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/services/action_dispatcher.py +0 -0
  90. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/services/action_executor.py +0 -0
  91. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/services/action_factory.py +0 -0
  92. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/services/action_parser_complex.py +0 -0
  93. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/services/action_parser_strategies.py +0 -0
  94. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/services/context_service.py +0 -0
  95. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/services/edit_simulator.py +0 -0
  96. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/services/execution_orchestrator.py +0 -0
  97. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/services/execution_report_assembler.py +0 -0
  98. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/services/init_service.py +0 -0
  99. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/services/markdown_plan_parser.py +0 -0
  100. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/services/markdown_report_formatter.py +0 -0
  101. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/services/parser_infrastructure.py +0 -0
  102. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/services/parser_metadata.py +0 -0
  103. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/services/parser_reporting.py +0 -0
  104. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/services/plan_validator.py +0 -0
  105. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/services/planning_service.py +0 -0
  106. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/services/prompt_manager.py +0 -0
  107. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/services/session_lifecycle_manager.py +0 -0
  108. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/services/session_loop_guard.py +0 -0
  109. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/services/session_orchestrator.py +0 -0
  110. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/services/session_planner.py +0 -0
  111. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/services/session_pruning_service.py +0 -0
  112. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/services/session_replanner.py +0 -0
  113. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/services/session_repository.py +0 -0
  114. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/services/session_service.py +0 -0
  115. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/services/templates/execution_report.md.j2 +0 -0
  116. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/services/update_checker.py +0 -0
  117. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/services/validation_rules/__init__.py +0 -0
  118. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/services/validation_rules/edit.py +0 -0
  119. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/services/validation_rules/edit_matcher.py +0 -0
  120. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/services/validation_rules/edit_matcher_heuristics.py +0 -0
  121. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/services/validation_rules/execute.py +0 -0
  122. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/services/validation_rules/filesystem.py +0 -0
  123. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/services/validation_rules/helpers.py +0 -0
  124. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/services/validation_rules/message.py +0 -0
  125. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/utils/__init__.py +0 -0
  126. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/utils/diff.py +0 -0
  127. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/utils/interrupt_guard.py +0 -0
  128. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/utils/io.py +0 -0
  129. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/utils/markdown.py +0 -0
  130. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/utils/serialization.py +0 -0
  131. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/utils/stdin_ownership.py +0 -0
  132. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/utils/string.py +0 -0
  133. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/core/utils/terminal.py +0 -0
  134. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/prompts.py +0 -0
  135. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/registries/__init__.py +0 -0
  136. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/registries/infrastructure.py +0 -0
  137. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/registries/reviewer.py +0 -0
  138. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/registries/validators.py +0 -0
  139. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/resources/MRP.xml +0 -0
  140. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/resources/__init__.py +0 -0
  141. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/resources/config/__init__.py +0 -0
  142. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/resources/config/config.yaml +0 -0
  143. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/resources/config/init.context +0 -0
  144. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/resources/config/prompts/architect.xml +0 -0
  145. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/resources/config/prompts/assistant.xml +0 -0
  146. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/resources/config/prompts/debugger.xml +0 -0
  147. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/resources/config/prompts/developer.xml +0 -0
  148. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/resources/config/prompts/pathfinder.xml +0 -0
  149. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/resources/config/prompts/prototyper.xml +0 -0
  150. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/resources/templates/ARCHITECTURE.md +0 -0
  151. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/resources/templates/PROJECT.md +0 -0
  152. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/resources/templates/case-file.md +0 -0
  153. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/resources/templates/ci.md +0 -0
  154. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/resources/templates/component-design.md +0 -0
  155. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/resources/templates/makefile.md +0 -0
  156. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/resources/templates/milestone.md +0 -0
  157. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/resources/templates/pre-commit.md +0 -0
  158. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/resources/templates/specification-document.md +0 -0
  159. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/src/teddy_executor/resources/templates/task-brief.md +0 -0
  160. {teddy_cli-0.1.17.dev1257 → teddy_cli-0.1.17.dev1259}/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.dev1257
3
+ Version: 0.1.17.dev1259
4
4
  Summary: A local-first, file-based AI coding workflow that applies the UNIX philosophy to AI collaboration.
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.dev1257"
3
+ version = "0.1.17.dev1259"
4
4
  description = "A local-first, file-based AI coding workflow that applies the UNIX philosophy to AI collaboration."
5
5
  authors = [{ name = "Raphael Atteritano" }]
6
6
  license = { text = "AGPL-3.0-only" }
@@ -249,7 +249,48 @@ def _determine_session_name(name: Optional[str], message: Optional[str]) -> str:
249
249
  return "session-auto"
250
250
 
251
251
 
252
- def _orchestrate_session_loop(
252
+ def _resolve_initial_turn(session_manager: ISessionManager, session_name: str) -> int:
253
+ """Resolves the process-relative turn baseline for the guardrails.
254
+
255
+ get_latest_turn returns a path string whose folder name is the turn ID. A
256
+ fresh session seeds turn 01 before the loop starts, so the baseline is 0; a
257
+ resume's latest turn is the last completed turn, so the baseline is that
258
+ turn. Non-numeric names (or test doubles) fall back to 0.
259
+ """
260
+ latest_turn_path = session_manager.get_latest_turn(session_name)
261
+ try:
262
+ latest_turn = int(Path(latest_turn_path).name) if latest_turn_path else 0
263
+ return max(0, latest_turn - 1) if latest_turn_path else 0
264
+ except (ValueError, TypeError):
265
+ # Handle non-numeric turn names or MagicMocks in tests
266
+ return 0
267
+
268
+
269
+ def _emit_guard_termination(guard_reason: Optional[str]) -> None:
270
+ """Prints a guardrail termination reason: first line red, remainder plain."""
271
+ reason = guard_reason or "YOLO guardrail limit reached."
272
+ lines = reason.lstrip("\n").split("\n", 1)
273
+ typer.secho("")
274
+ typer.secho(lines[0], fg=typer.colors.RED)
275
+ if len(lines) > 1:
276
+ typer.secho(lines[1])
277
+
278
+
279
+ def _should_exit_pipeline(pipeline: bool, report: Any) -> bool:
280
+ """True when a pipeline run's report carries a MESSAGE action to exit on.
281
+
282
+ Short-circuits on ``not pipeline`` so a non-pipeline run never touches
283
+ report.action_logs (mirroring the original guard order).
284
+ """
285
+ if not pipeline or not report.action_logs:
286
+ return False
287
+ return any(
288
+ (getattr(log_entry, "action_type", None) or "").upper() == "MESSAGE"
289
+ for log_entry in report.action_logs
290
+ )
291
+
292
+
293
+ def _orchestrate_session_loop( # noqa: PLR0913
253
294
  container: Container,
254
295
  session_name: str,
255
296
  interactive: bool,
@@ -265,20 +306,7 @@ def _orchestrate_session_loop(
265
306
  session_manager = container.resolve(ISessionManager)
266
307
 
267
308
  # Resolve initial state for process-relative guardrails
268
- latest_turn_path = session_manager.get_latest_turn(session_name)
269
- try:
270
- # get_latest_turn returns a path string; the turn ID is the folder name.
271
- # For a fresh session, create_session seeds turn 01 (the initial request)
272
- # BEFORE the loop starts, so the latest turn = 1. The loop then processes
273
- # turn 01 again (turn_count starts at 1). Subtracting 1 makes the baseline
274
- # 0 for fresh sessions so delta after turn 01 = 1.
275
- # For resume, the latest turn is the last completed turn, and the loop
276
- # processes the NEXT turn (turn_count = latest + 1), so delta is correct.
277
- latest_turn = int(Path(latest_turn_path).name) if latest_turn_path else 0
278
- initial_turn = max(0, latest_turn - 1) if latest_turn_path else 0
279
- except (ValueError, TypeError):
280
- # Handle non-numeric turn names or MagicMocks in tests
281
- initial_turn = 0
309
+ initial_turn = _resolve_initial_turn(session_manager, session_name)
282
310
 
283
311
  # Resolve initial cost for process-relative guardrails
284
312
  initial_cost = session_manager.get_cumulative_cost(session_name)
@@ -338,23 +366,12 @@ def _orchestrate_session_loop(
338
366
  turn_count, cumulative_cost, interactive
339
367
  )
340
368
  if not should_continue:
341
- reason = guard_reason or "YOLO guardrail limit reached."
342
- lines = reason.lstrip("\n").split("\n", 1)
343
- typer.secho("")
344
- typer.secho(lines[0], fg=typer.colors.RED)
345
- if len(lines) > 1:
346
- typer.secho(lines[1])
369
+ _emit_guard_termination(guard_reason)
347
370
  break
348
371
 
349
372
  # Pipeline mode: exit cleanly after the first ## Message
350
- if pipeline and report.action_logs:
351
- for log_entry in report.action_logs:
352
- action_type = getattr(log_entry, "action_type", None) or ""
353
- if action_type.upper() == "MESSAGE":
354
- break # break inner for
355
- else:
356
- continue # no MESSAGE found, continue outer loop
357
- break # MESSAGE found, exit session loop
373
+ if _should_exit_pipeline(pipeline, report):
374
+ break
358
375
  except KeyboardInterrupt:
359
376
  # Immediate-exit semantics (Task Brief): Ctrl+C while nothing is in
360
377
  # flight (prompts, planning) terminates the session with a notice —
@@ -415,6 +432,7 @@ def _display_drift_notification(container: Container) -> list[str]:
415
432
  config = container.resolve(IConfigService)
416
433
  report = container.resolve(IInitUseCase).check_drift()
417
434
  fired: list[str] = []
435
+ drift_lines: list[str] = []
418
436
 
419
437
  if config.get_setting("checks.prompts", True) and report.prompts_drifted:
420
438
  clause = _format_drift_clause(
@@ -424,9 +442,9 @@ def _display_drift_notification(container: Container) -> list[str]:
424
442
  report.edited_prompts,
425
443
  report.missing_prompts,
426
444
  )
427
- typer.echo(
445
+ drift_lines.append(
428
446
  typer.style(
429
- f"ℹ {clause}. To overwrite, run: teddy init prompts\n",
447
+ f"ℹ {clause}. To update them, run: teddy init prompts",
430
448
  fg=typer.colors.YELLOW,
431
449
  )
432
450
  )
@@ -440,14 +458,21 @@ def _display_drift_notification(container: Container) -> list[str]:
440
458
  report.edited_templates,
441
459
  report.missing_templates,
442
460
  )
443
- typer.echo(
461
+ drift_lines.append(
444
462
  typer.style(
445
- f"ℹ {clause}. To overwrite, run: teddy init templates\n",
463
+ f"ℹ {clause}. To update them, run: teddy init templates",
446
464
  fg=typer.colors.YELLOW,
447
465
  )
448
466
  )
449
467
  fired.append("checks.templates")
450
468
 
469
+ if drift_lines:
470
+ # A single leading blank separates this block from the
471
+ # ``Checking configurations...`` line above it. The lines carry no
472
+ # trailing newline, so the shared disable-footer (emitted next) abuts
473
+ # the final drift line.
474
+ typer.echo("\n" + "\n".join(drift_lines))
475
+
451
476
  return fired
452
477
 
453
478
 
@@ -640,10 +665,13 @@ def _echo_config_success(
640
665
  resolved_model = model
641
666
  else:
642
667
  resolved_model = config_service.get_setting("llm.model", "unknown")
643
- msg = f"API key valid! Model: {resolved_model}"
668
+ identity_lines: list[str] = []
644
669
  if agent:
645
- msg += f" | Agent: {canonical_agent_name(agent)}"
646
- typer.echo(msg, err=True)
670
+ identity_lines.append(f"Agent: {canonical_agent_name(agent)}")
671
+ identity_lines.append(f"Model: {resolved_model}")
672
+ # A leading blank separates the identity block from whatever precedes it
673
+ # (``Checking configurations...`` or the drift block/footer).
674
+ typer.echo("\n" + "\n".join(identity_lines), err=True)
647
675
 
648
676
 
649
677
  def _run_cli_preflight_check(
@@ -1080,15 +1108,15 @@ def handle_resume_session( # noqa: PLR0913
1080
1108
  # 2. Resolve session name
1081
1109
  session_name = _resolve_session_name(container, path)
1082
1110
 
1083
- # 3. Display session path
1084
- session_relative_path = str(Path(".teddy") / "sessions" / session_name)
1085
- typer.echo(f"Resuming session: {session_relative_path}")
1086
-
1087
- # 4. Display actual_model and sync config overrides
1111
+ # 3. Display actual_model and sync config overrides
1088
1112
  _sync_and_display_session_meta(
1089
1113
  container, session_name, model=model, api_key=api_key
1090
1114
  )
1091
1115
 
1116
+ # 4. Display session path (below the Agent/Model identity block)
1117
+ session_relative_path = str(Path(".teddy") / "sessions" / session_name)
1118
+ typer.echo(f"\nResuming session: {session_relative_path}")
1119
+
1092
1120
  # 5. Agent switch: if -a/--agent provided, update session agent permanently
1093
1121
  if agent:
1094
1122
  container.resolve(ISessionManager).set_session_agent(session_name, agent)