teddy-cli 0.1.17.dev1217__tar.gz → 0.1.17.dev1218__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.dev1217 → teddy_cli-0.1.17.dev1218}/PKG-INFO +1 -1
  2. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/pyproject.toml +1 -1
  3. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/adapters/inbound/session_cli_handlers.py +74 -24
  4. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/.gitignore +0 -0
  5. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/LICENSE +0 -0
  6. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/__init__.py +0 -0
  7. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/__main__.py +0 -0
  8. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/adapters/__init__.py +0 -0
  9. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/adapters/inbound/__init__.py +0 -0
  10. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/adapters/inbound/cli_formatter.py +0 -0
  11. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/adapters/inbound/cli_helpers.py +0 -0
  12. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/adapters/inbound/textual_plan_reviewer.py +0 -0
  13. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_app.py +0 -0
  14. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_editor.py +0 -0
  15. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_execution.py +0 -0
  16. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_helpers.py +0 -0
  17. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_logic.py +0 -0
  18. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_previews.py +0 -0
  19. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_widgets.py +0 -0
  20. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/adapters/outbound/__init__.py +0 -0
  21. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/adapters/outbound/console_interactor.py +0 -0
  22. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/adapters/outbound/console_interactor_ask_loop.py +0 -0
  23. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/adapters/outbound/console_interactor_helpers.py +0 -0
  24. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/adapters/outbound/console_tooling.py +0 -0
  25. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/adapters/outbound/filesystem_helpers.py +0 -0
  26. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/adapters/outbound/litellm_adapter.py +0 -0
  27. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/adapters/outbound/local_file_system_adapter.py +0 -0
  28. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/adapters/outbound/local_repo_tree_generator.py +0 -0
  29. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/adapters/outbound/openrouter_hydrator.py +0 -0
  30. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/adapters/outbound/shell_adapter.py +0 -0
  31. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/adapters/outbound/shell_command_builder.py +0 -0
  32. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/adapters/outbound/suppressed_logging.py +0 -0
  33. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/adapters/outbound/system_environment_adapter.py +0 -0
  34. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/adapters/outbound/system_environment_inspector.py +0 -0
  35. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/adapters/outbound/system_time_adapter.py +0 -0
  36. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/adapters/outbound/terminal_quit_key_listener.py +0 -0
  37. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/adapters/outbound/web_scraper_adapter.py +0 -0
  38. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/adapters/outbound/web_searcher_adapter.py +0 -0
  39. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/adapters/outbound/yaml_config_adapter.py +0 -0
  40. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/container.py +0 -0
  41. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/__init__.py +0 -0
  42. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/domain/__init__.py +0 -0
  43. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/domain/models/__init__.py +0 -0
  44. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/domain/models/action_ports.py +0 -0
  45. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/domain/models/change_set.py +0 -0
  46. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/domain/models/drift_report.py +0 -0
  47. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/domain/models/exceptions.py +0 -0
  48. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/domain/models/execution_report.py +0 -0
  49. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/domain/models/orchestrator_ports.py +0 -0
  50. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/domain/models/plan.py +0 -0
  51. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/domain/models/planning_ports.py +0 -0
  52. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/domain/models/project_context.py +0 -0
  53. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/domain/models/report_assembly_data.py +0 -0
  54. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/domain/models/session.py +0 -0
  55. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/domain/models/shell_output.py +0 -0
  56. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/domain/models/web_search_results.py +0 -0
  57. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/ports/__init__.py +0 -0
  58. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/ports/inbound/__init__.py +0 -0
  59. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/ports/inbound/edit_simulator.py +0 -0
  60. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/ports/inbound/get_context_use_case.py +0 -0
  61. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/ports/inbound/init.py +0 -0
  62. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/ports/inbound/plan_parser.py +0 -0
  63. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/ports/inbound/plan_reviewer.py +0 -0
  64. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/ports/inbound/plan_validator.py +0 -0
  65. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/ports/inbound/planning_use_case.py +0 -0
  66. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/ports/inbound/run_plan_use_case.py +0 -0
  67. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/ports/outbound/__init__.py +0 -0
  68. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/ports/outbound/config_service.py +0 -0
  69. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/ports/outbound/environment_inspector.py +0 -0
  70. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/ports/outbound/execution_report_assembler.py +0 -0
  71. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/ports/outbound/file_system_manager.py +0 -0
  72. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/ports/outbound/llm_client.py +0 -0
  73. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/ports/outbound/markdown_report_formatter.py +0 -0
  74. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/ports/outbound/prompt_manager.py +0 -0
  75. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/ports/outbound/quit_key_listener.py +0 -0
  76. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/ports/outbound/repo_tree_generator.py +0 -0
  77. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/ports/outbound/session_loop_guard.py +0 -0
  78. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/ports/outbound/session_manager.py +0 -0
  79. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/ports/outbound/session_repository.py +0 -0
  80. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/ports/outbound/shell_executor.py +0 -0
  81. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/ports/outbound/system_environment.py +0 -0
  82. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/ports/outbound/time_service.py +0 -0
  83. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/ports/outbound/user_interactor.py +0 -0
  84. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/ports/outbound/web_scraper.py +0 -0
  85. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/ports/outbound/web_searcher.py +0 -0
  86. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/__init__.py +0 -0
  87. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/action_changeset_builder.py +0 -0
  88. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/action_diff_manager.py +0 -0
  89. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/action_dispatcher.py +0 -0
  90. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/action_executor.py +0 -0
  91. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/action_factory.py +0 -0
  92. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/action_parser_complex.py +0 -0
  93. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/action_parser_strategies.py +0 -0
  94. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/context_service.py +0 -0
  95. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/edit_simulator.py +0 -0
  96. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/execution_orchestrator.py +0 -0
  97. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/execution_report_assembler.py +0 -0
  98. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/init_service.py +0 -0
  99. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/markdown_plan_parser.py +0 -0
  100. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/markdown_report_formatter.py +0 -0
  101. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/parser_infrastructure.py +0 -0
  102. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/parser_metadata.py +0 -0
  103. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/parser_reporting.py +0 -0
  104. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/plan_validator.py +0 -0
  105. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/planning_service.py +0 -0
  106. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/prompt_manager.py +0 -0
  107. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/session_lifecycle_manager.py +0 -0
  108. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/session_loop_guard.py +0 -0
  109. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/session_orchestrator.py +0 -0
  110. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/session_planner.py +0 -0
  111. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/session_pruning_service.py +0 -0
  112. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/session_replanner.py +0 -0
  113. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/session_repository.py +0 -0
  114. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/session_service.py +0 -0
  115. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/templates/execution_report.md.j2 +0 -0
  116. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/update_checker.py +0 -0
  117. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/validation_rules/__init__.py +0 -0
  118. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/validation_rules/edit.py +0 -0
  119. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/validation_rules/edit_matcher.py +0 -0
  120. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/validation_rules/edit_matcher_heuristics.py +0 -0
  121. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/validation_rules/execute.py +0 -0
  122. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/validation_rules/filesystem.py +0 -0
  123. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/validation_rules/helpers.py +0 -0
  124. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/validation_rules/message.py +0 -0
  125. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/utils/__init__.py +0 -0
  126. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/utils/diff.py +0 -0
  127. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/utils/interrupt_guard.py +0 -0
  128. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/utils/io.py +0 -0
  129. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/utils/markdown.py +0 -0
  130. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/utils/serialization.py +0 -0
  131. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/utils/stdin_ownership.py +0 -0
  132. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/utils/string.py +0 -0
  133. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/utils/terminal.py +0 -0
  134. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/prompts.py +0 -0
  135. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/registries/__init__.py +0 -0
  136. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/registries/infrastructure.py +0 -0
  137. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/registries/reviewer.py +0 -0
  138. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/registries/validators.py +0 -0
  139. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/resources/MRP.xml +0 -0
  140. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/resources/__init__.py +0 -0
  141. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/resources/config/__init__.py +0 -0
  142. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/resources/config/config.yaml +0 -0
  143. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/resources/config/init.context +0 -0
  144. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/resources/config/prompts/architect.xml +0 -0
  145. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/resources/config/prompts/assistant.xml +0 -0
  146. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/resources/config/prompts/debugger.xml +0 -0
  147. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/resources/config/prompts/developer.xml +0 -0
  148. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/resources/config/prompts/pathfinder.xml +0 -0
  149. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/resources/config/prompts/prototyper.xml +0 -0
  150. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/resources/templates/ARCHITECTURE.md +0 -0
  151. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/resources/templates/PROJECT.md +0 -0
  152. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/resources/templates/case-file.md +0 -0
  153. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/resources/templates/ci.md +0 -0
  154. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/resources/templates/component-design.md +0 -0
  155. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/resources/templates/makefile.md +0 -0
  156. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/resources/templates/milestone.md +0 -0
  157. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/resources/templates/pre-commit.md +0 -0
  158. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/resources/templates/specification-document.md +0 -0
  159. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/resources/templates/task-brief.md +0 -0
  160. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1218}/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.dev1217
3
+ Version: 0.1.17.dev1218
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.dev1217"
3
+ version = "0.1.17.dev1218"
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" }
@@ -369,37 +369,87 @@ def _orchestrate_session_loop(
369
369
  signal.signal(signal.SIGINT, previous_handler)
370
370
 
371
371
 
372
- def _display_drift_notification(container: Container) -> None:
372
+ def _format_drift_clause(
373
+ noun_singular: str,
374
+ noun_plural: str,
375
+ target_dir: str,
376
+ edited: Sequence[str],
377
+ missing: Sequence[str],
378
+ ) -> str:
379
+ """Builds the count-aware 'what drifted' clause for ONE notification channel.
380
+
381
+ Distinguishes CHANGED from MISSING files and singularises on a single file,
382
+ e.g. ``2 prompts in .teddy/prompts/ differ from this version's defaults``,
383
+ ``1 prompt in .teddy/prompts/ is missing``, or ``3 prompts in .teddy/prompts/
384
+ differ from this version's defaults (1 changed, 2 missing)``.
385
+ """
386
+ changed = len(edited)
387
+ missing_count = len(missing)
388
+ total = changed + missing_count
389
+ noun = noun_singular if total == 1 else noun_plural
390
+ if changed and missing_count:
391
+ differ = "differs" if total == 1 else "differ"
392
+ return (
393
+ f"{total} {noun} in {target_dir} {differ} from this version's defaults "
394
+ f"({changed} changed, {missing_count} missing)"
395
+ )
396
+ if changed:
397
+ differ = "differs" if total == 1 else "differ"
398
+ return f"{total} {noun} in {target_dir} {differ} from this version's defaults"
399
+ is_are = "is" if total == 1 else "are"
400
+ return f"{total} {noun} in {target_dir} {is_are} missing"
401
+
402
+
403
+ def _display_drift_notification(container: Container) -> list[str]:
373
404
  """Advises the restore command when user prompts/templates have drifted.
374
405
 
375
406
  Compares the user's ``.teddy/prompts/`` and ``docs/templates/`` against the
376
- bundled defaults (via ``IInitUseCase.check_drift``) and, when they have
377
- drifted (edited or missing), emits a yellow, actionable advice naming the
378
- restore command(s). Advisory only: it runs on the preflight HEALTHY path and
379
- never blocks the session. Gated by the checks.prompts_templates config
380
- toggle (defaults to enabled).
407
+ bundled defaults (via ``IInitUseCase.check_drift``) and, for EACH channel that
408
+ is BOTH enabled AND drifted, emits exactly ONE yellow, count-aware advice line
409
+ naming the restore command. The prompts channel is emitted before the
410
+ templates channel. Returns the list of config keys whose check actually fired
411
+ (``checks.prompts`` / ``checks.templates``) so a shared disable-footer can
412
+ name them. Advisory only: it runs on the preflight HEALTHY path and never
413
+ blocks the session. Each channel is gated by its own config toggle
414
+ (``checks.prompts`` / ``checks.templates``), both defaulting to enabled.
381
415
  """
382
416
  config = container.resolve(IConfigService)
383
- if not config.get_setting("checks.prompts_templates", True):
384
- return
385
-
386
417
  report = container.resolve(IInitUseCase).check_drift()
387
- if not report.has_drift:
388
- return
389
-
390
- commands: list[str] = []
391
- if report.prompts_drifted:
392
- commands.append("teddy init prompts")
393
- if report.templates_drifted:
394
- commands.append("teddy init templates")
395
-
396
- typer.echo(
397
- typer.style(
398
- "ℹ Prompt/template drift detected. To restore the bundled "
399
- f"defaults, run: {' and '.join(commands)}\n",
400
- fg=typer.colors.YELLOW,
418
+ fired: list[str] = []
419
+
420
+ if config.get_setting("checks.prompts", True) and report.prompts_drifted:
421
+ clause = _format_drift_clause(
422
+ "prompt",
423
+ "prompts",
424
+ ".teddy/prompts/",
425
+ report.edited_prompts,
426
+ report.missing_prompts,
401
427
  )
402
- )
428
+ typer.echo(
429
+ typer.style(
430
+ f"ℹ {clause}. To overwrite, run: teddy init prompts\n",
431
+ fg=typer.colors.YELLOW,
432
+ )
433
+ )
434
+ fired.append("checks.prompts")
435
+
436
+ if config.get_setting("checks.templates", True) and report.templates_drifted:
437
+ clause = _format_drift_clause(
438
+ "template",
439
+ "templates",
440
+ "docs/templates/",
441
+ report.edited_templates,
442
+ report.missing_templates,
443
+ )
444
+ typer.echo(
445
+ typer.style(
446
+ f"ℹ {clause}. To overwrite, run: teddy init templates\n",
447
+ fg=typer.colors.YELLOW,
448
+ )
449
+ )
450
+ fired.append("checks.templates")
451
+
452
+ return fired
403
453
 
404
454
 
405
455
  def _display_update_notification(container: Container, cache_path: Path) -> None: