teddy-cli 0.1.17.dev1217__tar.gz → 0.1.17.dev1219__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.dev1219}/PKG-INFO +1 -1
  2. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/pyproject.toml +1 -1
  3. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/adapters/inbound/session_cli_handlers.py +85 -29
  4. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/.gitignore +0 -0
  5. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/LICENSE +0 -0
  6. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/__init__.py +0 -0
  7. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/__main__.py +0 -0
  8. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/adapters/__init__.py +0 -0
  9. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/adapters/inbound/__init__.py +0 -0
  10. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/adapters/inbound/cli_formatter.py +0 -0
  11. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/adapters/inbound/cli_helpers.py +0 -0
  12. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/adapters/inbound/textual_plan_reviewer.py +0 -0
  13. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_app.py +0 -0
  14. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_editor.py +0 -0
  15. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_execution.py +0 -0
  16. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_helpers.py +0 -0
  17. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_logic.py +0 -0
  18. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_previews.py +0 -0
  19. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_widgets.py +0 -0
  20. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/adapters/outbound/__init__.py +0 -0
  21. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/adapters/outbound/console_interactor.py +0 -0
  22. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/adapters/outbound/console_interactor_ask_loop.py +0 -0
  23. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/adapters/outbound/console_interactor_helpers.py +0 -0
  24. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/adapters/outbound/console_tooling.py +0 -0
  25. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/adapters/outbound/filesystem_helpers.py +0 -0
  26. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/adapters/outbound/litellm_adapter.py +0 -0
  27. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/adapters/outbound/local_file_system_adapter.py +0 -0
  28. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/adapters/outbound/local_repo_tree_generator.py +0 -0
  29. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/adapters/outbound/openrouter_hydrator.py +0 -0
  30. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/adapters/outbound/shell_adapter.py +0 -0
  31. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/adapters/outbound/shell_command_builder.py +0 -0
  32. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/adapters/outbound/suppressed_logging.py +0 -0
  33. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/adapters/outbound/system_environment_adapter.py +0 -0
  34. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/adapters/outbound/system_environment_inspector.py +0 -0
  35. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/adapters/outbound/system_time_adapter.py +0 -0
  36. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/adapters/outbound/terminal_quit_key_listener.py +0 -0
  37. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/adapters/outbound/web_scraper_adapter.py +0 -0
  38. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/adapters/outbound/web_searcher_adapter.py +0 -0
  39. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/adapters/outbound/yaml_config_adapter.py +0 -0
  40. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/container.py +0 -0
  41. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/__init__.py +0 -0
  42. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/domain/__init__.py +0 -0
  43. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/domain/models/__init__.py +0 -0
  44. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/domain/models/action_ports.py +0 -0
  45. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/domain/models/change_set.py +0 -0
  46. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/domain/models/drift_report.py +0 -0
  47. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/domain/models/exceptions.py +0 -0
  48. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/domain/models/execution_report.py +0 -0
  49. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/domain/models/orchestrator_ports.py +0 -0
  50. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/domain/models/plan.py +0 -0
  51. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/domain/models/planning_ports.py +0 -0
  52. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/domain/models/project_context.py +0 -0
  53. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/domain/models/report_assembly_data.py +0 -0
  54. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/domain/models/session.py +0 -0
  55. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/domain/models/shell_output.py +0 -0
  56. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/domain/models/web_search_results.py +0 -0
  57. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/ports/__init__.py +0 -0
  58. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/ports/inbound/__init__.py +0 -0
  59. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/ports/inbound/edit_simulator.py +0 -0
  60. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/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.dev1219}/src/teddy_executor/core/ports/inbound/init.py +0 -0
  62. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/ports/inbound/plan_parser.py +0 -0
  63. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/ports/inbound/plan_reviewer.py +0 -0
  64. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/ports/inbound/plan_validator.py +0 -0
  65. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/ports/inbound/planning_use_case.py +0 -0
  66. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/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.dev1219}/src/teddy_executor/core/ports/outbound/__init__.py +0 -0
  68. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/ports/outbound/config_service.py +0 -0
  69. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/ports/outbound/environment_inspector.py +0 -0
  70. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/ports/outbound/execution_report_assembler.py +0 -0
  71. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/ports/outbound/file_system_manager.py +0 -0
  72. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/ports/outbound/llm_client.py +0 -0
  73. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/ports/outbound/markdown_report_formatter.py +0 -0
  74. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/ports/outbound/prompt_manager.py +0 -0
  75. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/ports/outbound/quit_key_listener.py +0 -0
  76. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/ports/outbound/repo_tree_generator.py +0 -0
  77. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/ports/outbound/session_loop_guard.py +0 -0
  78. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/ports/outbound/session_manager.py +0 -0
  79. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/ports/outbound/session_repository.py +0 -0
  80. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/ports/outbound/shell_executor.py +0 -0
  81. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/ports/outbound/system_environment.py +0 -0
  82. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/ports/outbound/time_service.py +0 -0
  83. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/ports/outbound/user_interactor.py +0 -0
  84. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/ports/outbound/web_scraper.py +0 -0
  85. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/ports/outbound/web_searcher.py +0 -0
  86. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/services/__init__.py +0 -0
  87. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/services/action_changeset_builder.py +0 -0
  88. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/services/action_diff_manager.py +0 -0
  89. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/services/action_dispatcher.py +0 -0
  90. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/services/action_executor.py +0 -0
  91. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/services/action_factory.py +0 -0
  92. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/services/action_parser_complex.py +0 -0
  93. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/services/action_parser_strategies.py +0 -0
  94. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/services/context_service.py +0 -0
  95. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/services/edit_simulator.py +0 -0
  96. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/services/execution_orchestrator.py +0 -0
  97. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/services/execution_report_assembler.py +0 -0
  98. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/services/init_service.py +0 -0
  99. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/services/markdown_plan_parser.py +0 -0
  100. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/services/markdown_report_formatter.py +0 -0
  101. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/services/parser_infrastructure.py +0 -0
  102. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/services/parser_metadata.py +0 -0
  103. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/services/parser_reporting.py +0 -0
  104. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/services/plan_validator.py +0 -0
  105. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/services/planning_service.py +0 -0
  106. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/services/prompt_manager.py +0 -0
  107. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/services/session_lifecycle_manager.py +0 -0
  108. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/services/session_loop_guard.py +0 -0
  109. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/services/session_orchestrator.py +0 -0
  110. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/services/session_planner.py +0 -0
  111. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/services/session_pruning_service.py +0 -0
  112. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/services/session_replanner.py +0 -0
  113. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/services/session_repository.py +0 -0
  114. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/services/session_service.py +0 -0
  115. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/services/templates/execution_report.md.j2 +0 -0
  116. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/services/update_checker.py +0 -0
  117. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/services/validation_rules/__init__.py +0 -0
  118. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/services/validation_rules/edit.py +0 -0
  119. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/services/validation_rules/edit_matcher.py +0 -0
  120. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/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.dev1219}/src/teddy_executor/core/services/validation_rules/execute.py +0 -0
  122. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/services/validation_rules/filesystem.py +0 -0
  123. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/services/validation_rules/helpers.py +0 -0
  124. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/services/validation_rules/message.py +0 -0
  125. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/utils/__init__.py +0 -0
  126. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/utils/diff.py +0 -0
  127. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/utils/interrupt_guard.py +0 -0
  128. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/utils/io.py +0 -0
  129. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/utils/markdown.py +0 -0
  130. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/utils/serialization.py +0 -0
  131. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/utils/stdin_ownership.py +0 -0
  132. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/utils/string.py +0 -0
  133. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/core/utils/terminal.py +0 -0
  134. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/prompts.py +0 -0
  135. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/registries/__init__.py +0 -0
  136. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/registries/infrastructure.py +0 -0
  137. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/registries/reviewer.py +0 -0
  138. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/registries/validators.py +0 -0
  139. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/resources/MRP.xml +0 -0
  140. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/resources/__init__.py +0 -0
  141. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/resources/config/__init__.py +0 -0
  142. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/resources/config/config.yaml +0 -0
  143. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/resources/config/init.context +0 -0
  144. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/resources/config/prompts/architect.xml +0 -0
  145. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/resources/config/prompts/assistant.xml +0 -0
  146. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/resources/config/prompts/debugger.xml +0 -0
  147. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/resources/config/prompts/developer.xml +0 -0
  148. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/resources/config/prompts/pathfinder.xml +0 -0
  149. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/resources/config/prompts/prototyper.xml +0 -0
  150. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/resources/templates/ARCHITECTURE.md +0 -0
  151. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/resources/templates/PROJECT.md +0 -0
  152. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/resources/templates/case-file.md +0 -0
  153. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/resources/templates/ci.md +0 -0
  154. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/resources/templates/component-design.md +0 -0
  155. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/resources/templates/makefile.md +0 -0
  156. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/resources/templates/milestone.md +0 -0
  157. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/resources/templates/pre-commit.md +0 -0
  158. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/resources/templates/specification-document.md +0 -0
  159. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/src/teddy_executor/resources/templates/task-brief.md +0 -0
  160. {teddy_cli-0.1.17.dev1217 → teddy_cli-0.1.17.dev1219}/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.dev1219
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.dev1219"
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,55 +369,109 @@ 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
- def _display_update_notification(container: Container, cache_path: Path) -> None:
455
+ def _display_update_notification(container: Container, cache_path: Path) -> list[str]:
406
456
  """Check the update cache and display a non-blocking notification
407
457
  if a newer version is available. Called on session startup, after
408
458
  the background check thread has been started. Gated by the
409
459
  checks.update config toggle (defaults to enabled); a disabled toggle
410
- suppresses the notification only -- the background fetch still runs."""
460
+ suppresses the notification only -- the background fetch still runs.
461
+
462
+ Returns ``["checks.update"]`` when a newer version is actually
463
+ displayed, else ``[]`` so the shared disable-footer can name the
464
+ fired check."""
411
465
  config = container.resolve(IConfigService)
412
466
  if not config.get_setting("checks.update", True):
413
- return
467
+ return []
414
468
  try:
415
469
  cache = read_update_cache(cache_path)
416
470
  if cache is None:
417
- return
471
+ return []
418
472
  latest = cache.get("latest_version", "")
419
473
  if not latest:
420
- return
474
+ return []
421
475
  current = get_current_version()
422
476
  if compare_versions(current, latest):
423
477
  # A pre-release install comes from the PyPI experimental channel (--pre).
@@ -434,11 +488,13 @@ def _display_update_notification(container: Container, cache_path: Path) -> None
434
488
  fg=typer.colors.YELLOW,
435
489
  )
436
490
  )
491
+ return ["checks.update"]
437
492
  except Exception:
438
493
  import logging
439
494
 
440
495
  logger = logging.getLogger(__name__)
441
496
  logger.debug("Failed to display update notification", exc_info=True)
497
+ return []
442
498
 
443
499
 
444
500
  def handle_new_session( # noqa: PLR0913