teddy-cli 0.1.17.dev1208__tar.gz → 0.1.17.dev1210__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.dev1208 → teddy_cli-0.1.17.dev1210}/PKG-INFO +1 -1
  2. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/pyproject.toml +1 -1
  3. teddy_cli-0.1.17.dev1210/src/teddy_executor/core/domain/models/drift_report.py +38 -0
  4. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/ports/inbound/init.py +14 -0
  5. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/services/init_service.py +71 -8
  6. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/resources/config/config.yaml +7 -0
  7. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/.gitignore +0 -0
  8. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/LICENSE +0 -0
  9. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/__init__.py +0 -0
  10. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/__main__.py +0 -0
  11. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/adapters/__init__.py +0 -0
  12. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/adapters/inbound/__init__.py +0 -0
  13. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/adapters/inbound/cli_formatter.py +0 -0
  14. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/adapters/inbound/cli_helpers.py +0 -0
  15. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/adapters/inbound/session_cli_handlers.py +0 -0
  16. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/adapters/inbound/textual_plan_reviewer.py +0 -0
  17. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_app.py +0 -0
  18. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_editor.py +0 -0
  19. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_execution.py +0 -0
  20. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_helpers.py +0 -0
  21. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_logic.py +0 -0
  22. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_previews.py +0 -0
  23. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_widgets.py +0 -0
  24. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/adapters/outbound/__init__.py +0 -0
  25. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/adapters/outbound/console_interactor.py +0 -0
  26. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/adapters/outbound/console_interactor_ask_loop.py +0 -0
  27. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/adapters/outbound/console_interactor_helpers.py +0 -0
  28. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/adapters/outbound/console_tooling.py +0 -0
  29. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/adapters/outbound/filesystem_helpers.py +0 -0
  30. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/adapters/outbound/litellm_adapter.py +0 -0
  31. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/adapters/outbound/local_file_system_adapter.py +0 -0
  32. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/adapters/outbound/local_repo_tree_generator.py +0 -0
  33. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/adapters/outbound/openrouter_hydrator.py +0 -0
  34. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/adapters/outbound/shell_adapter.py +0 -0
  35. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/adapters/outbound/shell_command_builder.py +0 -0
  36. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/adapters/outbound/suppressed_logging.py +0 -0
  37. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/adapters/outbound/system_environment_adapter.py +0 -0
  38. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/adapters/outbound/system_environment_inspector.py +0 -0
  39. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/adapters/outbound/system_time_adapter.py +0 -0
  40. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/adapters/outbound/terminal_quit_key_listener.py +0 -0
  41. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/adapters/outbound/web_scraper_adapter.py +0 -0
  42. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/adapters/outbound/web_searcher_adapter.py +0 -0
  43. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/adapters/outbound/yaml_config_adapter.py +0 -0
  44. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/container.py +0 -0
  45. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/__init__.py +0 -0
  46. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/domain/__init__.py +0 -0
  47. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/domain/models/__init__.py +0 -0
  48. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/domain/models/action_ports.py +0 -0
  49. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/domain/models/change_set.py +0 -0
  50. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/domain/models/exceptions.py +0 -0
  51. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/domain/models/execution_report.py +0 -0
  52. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/domain/models/orchestrator_ports.py +0 -0
  53. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/domain/models/plan.py +0 -0
  54. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/domain/models/planning_ports.py +0 -0
  55. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/domain/models/project_context.py +0 -0
  56. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/domain/models/report_assembly_data.py +0 -0
  57. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/domain/models/session.py +0 -0
  58. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/domain/models/shell_output.py +0 -0
  59. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/domain/models/web_search_results.py +0 -0
  60. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/ports/__init__.py +0 -0
  61. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/ports/inbound/__init__.py +0 -0
  62. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/ports/inbound/edit_simulator.py +0 -0
  63. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/ports/inbound/get_context_use_case.py +0 -0
  64. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/ports/inbound/plan_parser.py +0 -0
  65. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/ports/inbound/plan_reviewer.py +0 -0
  66. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/ports/inbound/plan_validator.py +0 -0
  67. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/ports/inbound/planning_use_case.py +0 -0
  68. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/ports/inbound/run_plan_use_case.py +0 -0
  69. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/ports/outbound/__init__.py +0 -0
  70. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/ports/outbound/config_service.py +0 -0
  71. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/ports/outbound/environment_inspector.py +0 -0
  72. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/ports/outbound/execution_report_assembler.py +0 -0
  73. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/ports/outbound/file_system_manager.py +0 -0
  74. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/ports/outbound/llm_client.py +0 -0
  75. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/ports/outbound/markdown_report_formatter.py +0 -0
  76. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/ports/outbound/prompt_manager.py +0 -0
  77. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/ports/outbound/quit_key_listener.py +0 -0
  78. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/ports/outbound/repo_tree_generator.py +0 -0
  79. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/ports/outbound/session_loop_guard.py +0 -0
  80. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/ports/outbound/session_manager.py +0 -0
  81. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/ports/outbound/session_repository.py +0 -0
  82. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/ports/outbound/shell_executor.py +0 -0
  83. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/ports/outbound/system_environment.py +0 -0
  84. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/ports/outbound/time_service.py +0 -0
  85. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/ports/outbound/user_interactor.py +0 -0
  86. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/ports/outbound/web_scraper.py +0 -0
  87. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/ports/outbound/web_searcher.py +0 -0
  88. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/services/__init__.py +0 -0
  89. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/services/action_changeset_builder.py +0 -0
  90. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/services/action_diff_manager.py +0 -0
  91. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/services/action_dispatcher.py +0 -0
  92. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/services/action_executor.py +0 -0
  93. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/services/action_factory.py +0 -0
  94. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/services/action_parser_complex.py +0 -0
  95. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/services/action_parser_strategies.py +0 -0
  96. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/services/context_service.py +0 -0
  97. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/services/edit_simulator.py +0 -0
  98. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/services/execution_orchestrator.py +0 -0
  99. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/services/execution_report_assembler.py +0 -0
  100. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/services/markdown_plan_parser.py +0 -0
  101. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/services/markdown_report_formatter.py +0 -0
  102. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/services/parser_infrastructure.py +0 -0
  103. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/services/parser_metadata.py +0 -0
  104. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/services/parser_reporting.py +0 -0
  105. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/services/plan_validator.py +0 -0
  106. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/services/planning_service.py +0 -0
  107. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/services/prompt_manager.py +0 -0
  108. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/services/session_lifecycle_manager.py +0 -0
  109. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/services/session_loop_guard.py +0 -0
  110. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/services/session_orchestrator.py +0 -0
  111. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/services/session_planner.py +0 -0
  112. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/services/session_pruning_service.py +0 -0
  113. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/services/session_replanner.py +0 -0
  114. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/services/session_repository.py +0 -0
  115. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/services/session_service.py +0 -0
  116. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/services/templates/execution_report.md.j2 +0 -0
  117. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/services/update_checker.py +0 -0
  118. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/services/validation_rules/__init__.py +0 -0
  119. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/services/validation_rules/edit.py +0 -0
  120. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/services/validation_rules/edit_matcher.py +0 -0
  121. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/services/validation_rules/edit_matcher_heuristics.py +0 -0
  122. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/services/validation_rules/execute.py +0 -0
  123. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/services/validation_rules/filesystem.py +0 -0
  124. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/services/validation_rules/helpers.py +0 -0
  125. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/services/validation_rules/message.py +0 -0
  126. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/utils/__init__.py +0 -0
  127. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/utils/diff.py +0 -0
  128. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/utils/interrupt_guard.py +0 -0
  129. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/utils/io.py +0 -0
  130. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/utils/markdown.py +0 -0
  131. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/utils/serialization.py +0 -0
  132. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/utils/stdin_ownership.py +0 -0
  133. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/utils/string.py +0 -0
  134. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/core/utils/terminal.py +0 -0
  135. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/prompts.py +0 -0
  136. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/registries/__init__.py +0 -0
  137. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/registries/infrastructure.py +0 -0
  138. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/registries/reviewer.py +0 -0
  139. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/registries/validators.py +0 -0
  140. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/resources/MRP.xml +0 -0
  141. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/resources/__init__.py +0 -0
  142. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/resources/config/__init__.py +0 -0
  143. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/resources/config/init.context +0 -0
  144. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/resources/config/prompts/architect.xml +0 -0
  145. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/resources/config/prompts/assistant.xml +0 -0
  146. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/resources/config/prompts/debugger.xml +0 -0
  147. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/resources/config/prompts/developer.xml +0 -0
  148. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/resources/config/prompts/pathfinder.xml +0 -0
  149. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/resources/config/prompts/prototyper.xml +0 -0
  150. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/resources/templates/ARCHITECTURE.md +0 -0
  151. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/resources/templates/PROJECT.md +0 -0
  152. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/resources/templates/case-file.md +0 -0
  153. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/resources/templates/ci.md +0 -0
  154. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/resources/templates/component-design.md +0 -0
  155. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/resources/templates/makefile.md +0 -0
  156. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/resources/templates/milestone.md +0 -0
  157. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/resources/templates/pre-commit.md +0 -0
  158. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/resources/templates/specification-document.md +0 -0
  159. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/src/teddy_executor/resources/templates/task-brief.md +0 -0
  160. {teddy_cli-0.1.17.dev1208 → teddy_cli-0.1.17.dev1210}/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.dev1208
3
+ Version: 0.1.17.dev1210
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.dev1208"
3
+ version = "0.1.17.dev1210"
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" }
@@ -0,0 +1,38 @@
1
+ """Domain model describing drift between user files and bundled defaults.
2
+
3
+ Seam Items 3/4 (session-behaviour): ``InitService.check_drift`` returns this
4
+ immutable report so the CLI preflight can advise ``teddy init prompts`` /
5
+ ``teddy init templates`` when the user's local copies have diverged from (or are
6
+ missing relative to) the bundled defaults.
7
+ """
8
+
9
+ from dataclasses import dataclass
10
+
11
+
12
+ @dataclass(frozen=True)
13
+ class DriftReport:
14
+ """Immutable summary of user files that diverge from bundled defaults.
15
+
16
+ Each field holds the *basenames* (e.g. ``pathfinder.xml``) of the affected
17
+ files, preserving the canonical manifest order for deterministic output.
18
+ """
19
+
20
+ edited_prompts: tuple[str, ...] = ()
21
+ missing_prompts: tuple[str, ...] = ()
22
+ edited_templates: tuple[str, ...] = ()
23
+ missing_templates: tuple[str, ...] = ()
24
+
25
+ @property
26
+ def prompts_drifted(self) -> bool:
27
+ """True when any user prompt is edited or missing."""
28
+ return bool(self.edited_prompts or self.missing_prompts)
29
+
30
+ @property
31
+ def templates_drifted(self) -> bool:
32
+ """True when any user template is edited or missing."""
33
+ return bool(self.edited_templates or self.missing_templates)
34
+
35
+ @property
36
+ def has_drift(self) -> bool:
37
+ """True when any user prompt or template has drifted from its default."""
38
+ return self.prompts_drifted or self.templates_drifted
@@ -1,5 +1,7 @@
1
1
  from abc import ABC, abstractmethod
2
2
 
3
+ from teddy_executor.core.domain.models.drift_report import DriftReport
4
+
3
5
 
4
6
  class IInitUseCase(ABC):
5
7
  """
@@ -60,3 +62,15 @@ class IInitUseCase(ABC):
60
62
  A human-readable status string (e.g., "Templates updated (11 files).").
61
63
  """
62
64
  pass
65
+
66
+ @abstractmethod
67
+ def check_drift(self) -> DriftReport:
68
+ """
69
+ Compares the user's prompts and templates against the bundled defaults.
70
+
71
+ Returns:
72
+ A DriftReport enumerating which ``.teddy/prompts/*.xml`` and
73
+ ``docs/templates/*.md`` files are edited or missing relative to the
74
+ bundled defaults.
75
+ """
76
+ pass
@@ -5,6 +5,7 @@ from importlib import resources
5
5
 
6
6
  import yaml
7
7
 
8
+ from teddy_executor.core.domain.models.drift_report import DriftReport
8
9
  from teddy_executor.core.ports.inbound.init import IInitUseCase
9
10
  from teddy_executor.core.ports.outbound.file_system_manager import IFileSystemManager
10
11
 
@@ -53,6 +54,19 @@ _TEMPLATE_FILES = [
53
54
  "pre-commit.md",
54
55
  ]
55
56
 
57
+ # Bundled prompt XMLs copied into a project's ``.teddy/prompts/`` by
58
+ # ``_init_prompts`` and compared by ``check_drift``. Kept as a fixed manifest
59
+ # (mirroring ``_TEMPLATE_FILES``) so the copy routine and the drift check share
60
+ # one single source of truth.
61
+ _PROMPT_FILES = [
62
+ "architect.xml",
63
+ "assistant.xml",
64
+ "debugger.xml",
65
+ "developer.xml",
66
+ "pathfinder.xml",
67
+ "prototyper.xml",
68
+ ]
69
+
56
70
 
57
71
  class InitService(IInitUseCase):
58
72
  """
@@ -189,14 +203,7 @@ class InitService(IInitUseCase):
189
203
  """
190
204
  return self._copy_bundled_files(
191
205
  dest_dir=".teddy/prompts",
192
- filenames=[
193
- "architect.xml",
194
- "assistant.xml",
195
- "debugger.xml",
196
- "developer.xml",
197
- "pathfinder.xml",
198
- "prototyper.xml",
199
- ],
206
+ filenames=_PROMPT_FILES,
200
207
  resolve_content=lambda fname: self._get_default_content(f"prompts/{fname}"),
201
208
  overwrite=overwrite,
202
209
  )
@@ -285,3 +292,59 @@ class InitService(IInitUseCase):
285
292
  """
286
293
  status = self._init_templates(overwrite=overwrite)
287
294
  return f"Templates {status}."
295
+
296
+ def _classify_drift(
297
+ self,
298
+ dest_dir: str,
299
+ filenames: Sequence[str],
300
+ resolve_bundled: Callable[[str], str | None],
301
+ ) -> tuple[tuple[str, ...], tuple[str, ...]]:
302
+ """Partitions ``filenames`` into (edited, missing) against bundled defaults.
303
+
304
+ A file is MISSING when its user copy is absent. It is EDITED when the
305
+ user copy exists, a bundled default is resolvable, and the two contents
306
+ differ. Unresolvable bundled defaults are skipped (never reported as
307
+ drift). Order is preserved from ``filenames`` for deterministic output.
308
+ """
309
+ edited: list[str] = []
310
+ missing: list[str] = []
311
+ for fname in filenames:
312
+ user_path = f"{dest_dir}/{fname}"
313
+ if not self._file_system.path_exists(user_path):
314
+ missing.append(fname)
315
+ continue
316
+ bundled_content = resolve_bundled(fname)
317
+ if bundled_content is None:
318
+ continue
319
+ if self._file_system.read_file(user_path) != bundled_content:
320
+ edited.append(fname)
321
+ return tuple(edited), tuple(missing)
322
+
323
+ def check_drift(self) -> DriftReport:
324
+ """Compares the user's prompts and templates against bundled defaults.
325
+
326
+ Reports which ``.teddy/prompts/*.xml`` and ``docs/templates/*.md`` files
327
+ have been EDITED away from their bundled default and which are MISSING,
328
+ so the CLI preflight can advise ``teddy init prompts`` /
329
+ ``teddy init templates``. An absent ``.teddy/prompts/`` directory simply
330
+ makes every prompt report as MISSING (per-file check, no directory
331
+ special-casing).
332
+ """
333
+ edited_prompts, missing_prompts = self._classify_drift(
334
+ dest_dir=".teddy/prompts",
335
+ filenames=_PROMPT_FILES,
336
+ resolve_bundled=lambda fname: self._get_default_content(f"prompts/{fname}"),
337
+ )
338
+ edited_templates, missing_templates = self._classify_drift(
339
+ dest_dir="docs/templates",
340
+ filenames=_TEMPLATE_FILES,
341
+ resolve_bundled=lambda fname: self._read_bundled_resource(
342
+ self._templates_dir, fname
343
+ ),
344
+ )
345
+ return DriftReport(
346
+ edited_prompts=edited_prompts,
347
+ missing_prompts=missing_prompts,
348
+ edited_templates=edited_templates,
349
+ missing_templates=missing_templates,
350
+ )
@@ -24,6 +24,13 @@ read:
24
24
  research:
25
25
  max_results: 5 # Number of SERP results to retrieve and automatically scrape.
26
26
 
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.
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).
33
+
27
34
  # Default for the --yolo / -y flag. When true, sessions auto-approve all
28
35
  # actions (non-interactive) without needing to pass --yolo. The explicit
29
36
  # --no-yolo / -n flag always overrides this setting for a single invocation.