teddy-cli 0.1.17.dev1216__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.dev1216 → teddy_cli-0.1.17.dev1218}/PKG-INFO +1 -1
  2. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/pyproject.toml +1 -1
  3. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/adapters/inbound/session_cli_handlers.py +74 -24
  4. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/resources/config/config.yaml +5 -4
  5. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/.gitignore +0 -0
  6. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/LICENSE +0 -0
  7. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/__init__.py +0 -0
  8. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/__main__.py +0 -0
  9. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/adapters/__init__.py +0 -0
  10. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/adapters/inbound/__init__.py +0 -0
  11. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/adapters/inbound/cli_formatter.py +0 -0
  12. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/adapters/inbound/cli_helpers.py +0 -0
  13. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/adapters/inbound/textual_plan_reviewer.py +0 -0
  14. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_app.py +0 -0
  15. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_editor.py +0 -0
  16. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_execution.py +0 -0
  17. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_helpers.py +0 -0
  18. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_logic.py +0 -0
  19. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_previews.py +0 -0
  20. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_widgets.py +0 -0
  21. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/adapters/outbound/__init__.py +0 -0
  22. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/adapters/outbound/console_interactor.py +0 -0
  23. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/adapters/outbound/console_interactor_ask_loop.py +0 -0
  24. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/adapters/outbound/console_interactor_helpers.py +0 -0
  25. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/adapters/outbound/console_tooling.py +0 -0
  26. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/adapters/outbound/filesystem_helpers.py +0 -0
  27. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/adapters/outbound/litellm_adapter.py +0 -0
  28. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/adapters/outbound/local_file_system_adapter.py +0 -0
  29. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/adapters/outbound/local_repo_tree_generator.py +0 -0
  30. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/adapters/outbound/openrouter_hydrator.py +0 -0
  31. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/adapters/outbound/shell_adapter.py +0 -0
  32. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/adapters/outbound/shell_command_builder.py +0 -0
  33. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/adapters/outbound/suppressed_logging.py +0 -0
  34. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/adapters/outbound/system_environment_adapter.py +0 -0
  35. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/adapters/outbound/system_environment_inspector.py +0 -0
  36. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/adapters/outbound/system_time_adapter.py +0 -0
  37. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/adapters/outbound/terminal_quit_key_listener.py +0 -0
  38. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/adapters/outbound/web_scraper_adapter.py +0 -0
  39. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/adapters/outbound/web_searcher_adapter.py +0 -0
  40. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/adapters/outbound/yaml_config_adapter.py +0 -0
  41. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/container.py +0 -0
  42. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/__init__.py +0 -0
  43. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/domain/__init__.py +0 -0
  44. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/domain/models/__init__.py +0 -0
  45. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/domain/models/action_ports.py +0 -0
  46. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/domain/models/change_set.py +0 -0
  47. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/domain/models/drift_report.py +0 -0
  48. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/domain/models/exceptions.py +0 -0
  49. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/domain/models/execution_report.py +0 -0
  50. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/domain/models/orchestrator_ports.py +0 -0
  51. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/domain/models/plan.py +0 -0
  52. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/domain/models/planning_ports.py +0 -0
  53. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/domain/models/project_context.py +0 -0
  54. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/domain/models/report_assembly_data.py +0 -0
  55. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/domain/models/session.py +0 -0
  56. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/domain/models/shell_output.py +0 -0
  57. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/domain/models/web_search_results.py +0 -0
  58. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/ports/__init__.py +0 -0
  59. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/ports/inbound/__init__.py +0 -0
  60. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/ports/inbound/edit_simulator.py +0 -0
  61. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/ports/inbound/get_context_use_case.py +0 -0
  62. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/ports/inbound/init.py +0 -0
  63. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/ports/inbound/plan_parser.py +0 -0
  64. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/ports/inbound/plan_reviewer.py +0 -0
  65. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/ports/inbound/plan_validator.py +0 -0
  66. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/ports/inbound/planning_use_case.py +0 -0
  67. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/ports/inbound/run_plan_use_case.py +0 -0
  68. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/ports/outbound/__init__.py +0 -0
  69. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/ports/outbound/config_service.py +0 -0
  70. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/ports/outbound/environment_inspector.py +0 -0
  71. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/ports/outbound/execution_report_assembler.py +0 -0
  72. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/ports/outbound/file_system_manager.py +0 -0
  73. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/ports/outbound/llm_client.py +0 -0
  74. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/ports/outbound/markdown_report_formatter.py +0 -0
  75. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/ports/outbound/prompt_manager.py +0 -0
  76. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/ports/outbound/quit_key_listener.py +0 -0
  77. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/ports/outbound/repo_tree_generator.py +0 -0
  78. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/ports/outbound/session_loop_guard.py +0 -0
  79. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/ports/outbound/session_manager.py +0 -0
  80. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/ports/outbound/session_repository.py +0 -0
  81. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/ports/outbound/shell_executor.py +0 -0
  82. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/ports/outbound/system_environment.py +0 -0
  83. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/ports/outbound/time_service.py +0 -0
  84. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/ports/outbound/user_interactor.py +0 -0
  85. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/ports/outbound/web_scraper.py +0 -0
  86. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/ports/outbound/web_searcher.py +0 -0
  87. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/__init__.py +0 -0
  88. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/action_changeset_builder.py +0 -0
  89. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/action_diff_manager.py +0 -0
  90. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/action_dispatcher.py +0 -0
  91. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/action_executor.py +0 -0
  92. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/action_factory.py +0 -0
  93. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/action_parser_complex.py +0 -0
  94. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/action_parser_strategies.py +0 -0
  95. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/context_service.py +0 -0
  96. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/edit_simulator.py +0 -0
  97. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/execution_orchestrator.py +0 -0
  98. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/execution_report_assembler.py +0 -0
  99. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/init_service.py +0 -0
  100. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/markdown_plan_parser.py +0 -0
  101. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/markdown_report_formatter.py +0 -0
  102. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/parser_infrastructure.py +0 -0
  103. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/parser_metadata.py +0 -0
  104. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/parser_reporting.py +0 -0
  105. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/plan_validator.py +0 -0
  106. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/planning_service.py +0 -0
  107. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/prompt_manager.py +0 -0
  108. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/session_lifecycle_manager.py +0 -0
  109. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/session_loop_guard.py +0 -0
  110. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/session_orchestrator.py +0 -0
  111. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/session_planner.py +0 -0
  112. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/session_pruning_service.py +0 -0
  113. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/session_replanner.py +0 -0
  114. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/session_repository.py +0 -0
  115. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/session_service.py +0 -0
  116. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/templates/execution_report.md.j2 +0 -0
  117. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/update_checker.py +0 -0
  118. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/validation_rules/__init__.py +0 -0
  119. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/validation_rules/edit.py +0 -0
  120. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/validation_rules/edit_matcher.py +0 -0
  121. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/validation_rules/edit_matcher_heuristics.py +0 -0
  122. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/validation_rules/execute.py +0 -0
  123. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/validation_rules/filesystem.py +0 -0
  124. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/validation_rules/helpers.py +0 -0
  125. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/services/validation_rules/message.py +0 -0
  126. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/utils/__init__.py +0 -0
  127. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/utils/diff.py +0 -0
  128. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/utils/interrupt_guard.py +0 -0
  129. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/utils/io.py +0 -0
  130. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/utils/markdown.py +0 -0
  131. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/utils/serialization.py +0 -0
  132. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/utils/stdin_ownership.py +0 -0
  133. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/utils/string.py +0 -0
  134. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/core/utils/terminal.py +0 -0
  135. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/prompts.py +0 -0
  136. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/registries/__init__.py +0 -0
  137. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/registries/infrastructure.py +0 -0
  138. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/registries/reviewer.py +0 -0
  139. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/registries/validators.py +0 -0
  140. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/resources/MRP.xml +0 -0
  141. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/resources/__init__.py +0 -0
  142. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/resources/config/__init__.py +0 -0
  143. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/resources/config/init.context +0 -0
  144. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/resources/config/prompts/architect.xml +0 -0
  145. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/resources/config/prompts/assistant.xml +0 -0
  146. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/resources/config/prompts/debugger.xml +0 -0
  147. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/resources/config/prompts/developer.xml +0 -0
  148. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/resources/config/prompts/pathfinder.xml +0 -0
  149. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/resources/config/prompts/prototyper.xml +0 -0
  150. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/resources/templates/ARCHITECTURE.md +0 -0
  151. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/resources/templates/PROJECT.md +0 -0
  152. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/resources/templates/case-file.md +0 -0
  153. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/resources/templates/ci.md +0 -0
  154. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/resources/templates/component-design.md +0 -0
  155. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/resources/templates/makefile.md +0 -0
  156. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/resources/templates/milestone.md +0 -0
  157. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/resources/templates/pre-commit.md +0 -0
  158. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/resources/templates/specification-document.md +0 -0
  159. {teddy_cli-0.1.17.dev1216 → teddy_cli-0.1.17.dev1218}/src/teddy_executor/resources/templates/task-brief.md +0 -0
  160. {teddy_cli-0.1.17.dev1216 → 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.dev1216
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.dev1216"
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:
@@ -25,11 +25,12 @@ research:
25
25
  max_results: 5 # Number of SERP results to retrieve and automatically scrape.
26
26
 
27
27
  # Notification Checks
28
- # Independent toggles for user-facing notifications. Both default to enabled
29
- # (true); existing user configs that lack this block behave as enabled.
28
+ # Independent toggles for user-facing notifications. All three default to
29
+ # enabled (true) when absent, so existing user configs keep working.
30
30
  checks:
31
- prompts_templates: true # Notify when docs/templates/ has drifted from the bundled defaults.
32
- update: true # Notify when a newer TeDDy version is available (background fetch still runs).
31
+ prompts: true # Notify when .teddy/prompts/ files differ from the bundled defaults.
32
+ templates: true # Notify when docs/templates/ files differ from the bundled defaults.
33
+ update: true # Notify when a newer TeDDy version is available (background fetch still runs).
33
34
 
34
35
  # Default for the --yolo / -y flag. When true, sessions auto-approve all
35
36
  # actions (non-interactive) without needing to pass --yolo. The explicit