teddy-cli 0.1.17.dev1301__tar.gz → 0.1.17.dev1302__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 (162) hide show
  1. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/PKG-INFO +1 -1
  2. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/pyproject.toml +1 -1
  3. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/services/init_service.py +46 -12
  4. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/resources/templates/vertical-slice.md +7 -2
  5. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/.gitignore +0 -0
  6. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/LICENSE +0 -0
  7. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/README.md +0 -0
  8. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/__init__.py +0 -0
  9. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/__main__.py +0 -0
  10. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/adapters/__init__.py +0 -0
  11. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/adapters/inbound/__init__.py +0 -0
  12. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/adapters/inbound/cli_formatter.py +0 -0
  13. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/adapters/inbound/cli_helpers.py +0 -0
  14. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/adapters/inbound/session_cli_handlers.py +0 -0
  15. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/adapters/inbound/textual_plan_reviewer.py +0 -0
  16. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_app.py +0 -0
  17. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_editor.py +0 -0
  18. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_execution.py +0 -0
  19. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_helpers.py +0 -0
  20. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_logic.py +0 -0
  21. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_previews.py +0 -0
  22. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_widgets.py +0 -0
  23. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/adapters/outbound/__init__.py +0 -0
  24. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/adapters/outbound/console_interactor.py +0 -0
  25. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/adapters/outbound/console_interactor_ask_loop.py +0 -0
  26. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/adapters/outbound/console_interactor_helpers.py +0 -0
  27. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/adapters/outbound/console_tooling.py +0 -0
  28. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/adapters/outbound/filesystem_helpers.py +0 -0
  29. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/adapters/outbound/litellm_adapter.py +0 -0
  30. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/adapters/outbound/local_file_system_adapter.py +0 -0
  31. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/adapters/outbound/local_repo_tree_generator.py +0 -0
  32. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/adapters/outbound/openrouter_hydrator.py +0 -0
  33. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/adapters/outbound/shell_adapter.py +0 -0
  34. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/adapters/outbound/shell_command_builder.py +0 -0
  35. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/adapters/outbound/suppressed_logging.py +0 -0
  36. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/adapters/outbound/system_environment_adapter.py +0 -0
  37. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/adapters/outbound/system_environment_inspector.py +0 -0
  38. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/adapters/outbound/system_time_adapter.py +0 -0
  39. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/adapters/outbound/terminal_quit_key_listener.py +0 -0
  40. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/adapters/outbound/web_scraper_adapter.py +0 -0
  41. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/adapters/outbound/web_searcher_adapter.py +0 -0
  42. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/adapters/outbound/yaml_config_adapter.py +0 -0
  43. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/container.py +0 -0
  44. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/__init__.py +0 -0
  45. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/domain/__init__.py +0 -0
  46. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/domain/models/__init__.py +0 -0
  47. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/domain/models/action_ports.py +0 -0
  48. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/domain/models/change_set.py +0 -0
  49. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/domain/models/drift_report.py +0 -0
  50. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/domain/models/exceptions.py +0 -0
  51. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/domain/models/execution_report.py +0 -0
  52. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/domain/models/orchestrator_ports.py +0 -0
  53. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/domain/models/plan.py +0 -0
  54. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/domain/models/planning_ports.py +0 -0
  55. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/domain/models/project_context.py +0 -0
  56. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/domain/models/report_assembly_data.py +0 -0
  57. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/domain/models/session.py +0 -0
  58. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/domain/models/shell_output.py +0 -0
  59. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/domain/models/web_search_results.py +0 -0
  60. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/ports/__init__.py +0 -0
  61. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/ports/inbound/__init__.py +0 -0
  62. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/ports/inbound/edit_simulator.py +0 -0
  63. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/ports/inbound/get_context_use_case.py +0 -0
  64. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/ports/inbound/init.py +0 -0
  65. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/ports/inbound/plan_parser.py +0 -0
  66. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/ports/inbound/plan_reviewer.py +0 -0
  67. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/ports/inbound/plan_validator.py +0 -0
  68. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/ports/inbound/planning_use_case.py +0 -0
  69. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/ports/inbound/run_plan_use_case.py +0 -0
  70. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/ports/outbound/__init__.py +0 -0
  71. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/ports/outbound/config_service.py +0 -0
  72. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/ports/outbound/environment_inspector.py +0 -0
  73. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/ports/outbound/execution_report_assembler.py +0 -0
  74. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/ports/outbound/file_system_manager.py +0 -0
  75. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/ports/outbound/llm_client.py +0 -0
  76. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/ports/outbound/markdown_report_formatter.py +0 -0
  77. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/ports/outbound/prompt_manager.py +0 -0
  78. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/ports/outbound/quit_key_listener.py +0 -0
  79. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/ports/outbound/repo_tree_generator.py +0 -0
  80. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/ports/outbound/session_loop_guard.py +0 -0
  81. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/ports/outbound/session_manager.py +0 -0
  82. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/ports/outbound/session_repository.py +0 -0
  83. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/ports/outbound/shell_executor.py +0 -0
  84. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/ports/outbound/system_environment.py +0 -0
  85. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/ports/outbound/time_service.py +0 -0
  86. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/ports/outbound/user_interactor.py +0 -0
  87. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/ports/outbound/web_scraper.py +0 -0
  88. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/ports/outbound/web_searcher.py +0 -0
  89. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/services/__init__.py +0 -0
  90. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/services/action_changeset_builder.py +0 -0
  91. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/services/action_diff_manager.py +0 -0
  92. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/services/action_dispatcher.py +0 -0
  93. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/services/action_executor.py +0 -0
  94. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/services/action_factory.py +0 -0
  95. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/services/action_parser_complex.py +0 -0
  96. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/services/action_parser_strategies.py +0 -0
  97. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/services/context_service.py +0 -0
  98. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/services/edit_simulator.py +0 -0
  99. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/services/execution_orchestrator.py +0 -0
  100. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/services/execution_report_assembler.py +0 -0
  101. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/services/markdown_plan_parser.py +0 -0
  102. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/services/markdown_report_formatter.py +0 -0
  103. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/services/parser_infrastructure.py +0 -0
  104. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/services/parser_metadata.py +0 -0
  105. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/services/parser_reporting.py +0 -0
  106. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/services/plan_validator.py +0 -0
  107. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/services/planning_service.py +0 -0
  108. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/services/prompt_manager.py +0 -0
  109. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/services/session_lifecycle_manager.py +0 -0
  110. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/services/session_loop_guard.py +0 -0
  111. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/services/session_orchestrator.py +0 -0
  112. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/services/session_planner.py +0 -0
  113. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/services/session_pruning_service.py +0 -0
  114. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/services/session_replanner.py +0 -0
  115. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/services/session_repository.py +0 -0
  116. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/services/session_service.py +0 -0
  117. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/services/templates/execution_report.md.j2 +0 -0
  118. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/services/update_checker.py +0 -0
  119. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/services/validation_rules/__init__.py +0 -0
  120. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/services/validation_rules/edit.py +0 -0
  121. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/services/validation_rules/edit_matcher.py +0 -0
  122. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/services/validation_rules/edit_matcher_heuristics.py +0 -0
  123. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/services/validation_rules/execute.py +0 -0
  124. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/services/validation_rules/filesystem.py +0 -0
  125. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/services/validation_rules/helpers.py +0 -0
  126. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/services/validation_rules/message.py +0 -0
  127. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/utils/__init__.py +0 -0
  128. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/utils/diff.py +0 -0
  129. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/utils/interrupt_guard.py +0 -0
  130. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/utils/io.py +0 -0
  131. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/utils/markdown.py +0 -0
  132. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/utils/paths.py +0 -0
  133. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/utils/serialization.py +0 -0
  134. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/utils/session_notices.py +0 -0
  135. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/utils/stdin_ownership.py +0 -0
  136. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/utils/string.py +0 -0
  137. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/core/utils/terminal.py +0 -0
  138. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/prompts.py +0 -0
  139. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/registries/__init__.py +0 -0
  140. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/registries/infrastructure.py +0 -0
  141. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/registries/reviewer.py +0 -0
  142. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/registries/validators.py +0 -0
  143. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/resources/MRP.md +0 -0
  144. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/resources/__init__.py +0 -0
  145. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/resources/config/__init__.py +0 -0
  146. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/resources/config/config.yaml +0 -0
  147. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/resources/config/init.context +0 -0
  148. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/resources/config/prompts/architect.md +0 -0
  149. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/resources/config/prompts/assistant.md +0 -0
  150. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/resources/config/prompts/debugger.md +0 -0
  151. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/resources/config/prompts/developer.md +0 -0
  152. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/resources/config/prompts/pathfinder.md +0 -0
  153. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/resources/config/prompts/prototyper.md +0 -0
  154. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/resources/templates/ARCHITECTURE.md +0 -0
  155. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/resources/templates/PROJECT.md +0 -0
  156. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/resources/templates/case-file.md +0 -0
  157. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/resources/templates/ci.md +0 -0
  158. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/resources/templates/component-design.md +0 -0
  159. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/resources/templates/makefile.md +0 -0
  160. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/resources/templates/milestone.md +0 -0
  161. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/resources/templates/pre-commit.md +0 -0
  162. {teddy_cli-0.1.17.dev1301 → teddy_cli-0.1.17.dev1302}/src/teddy_executor/resources/templates/specification-document.md +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: teddy-cli
3
- Version: 0.1.17.dev1301
3
+ Version: 0.1.17.dev1302
4
4
  Summary: The local-first, test-driven agentic engineering harness. Because you should own the means of development.
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.dev1301"
3
+ version = "0.1.17.dev1302"
4
4
  description = "The local-first, test-driven agentic engineering harness. Because you should own the means of development."
5
5
  readme = "README.md"
6
6
  keywords = [
@@ -146,6 +146,35 @@ class InitService(IInitUseCase):
146
146
  """Returns a filename's case-folded stem for identity comparison."""
147
147
  return Path(filename).stem.casefold()
148
148
 
149
+ def _present_stems(self, dest_dir: str) -> set[str]:
150
+ """Returns the case-folded stems of every entry in ``dest_dir``.
151
+
152
+ Returns an empty set when ``dest_dir`` is absent, because the file-system
153
+ adapter raises ``FileNotFoundError`` when asked to list a missing
154
+ directory. Single-sources the directory scan shared by the prompt copy
155
+ routine and the drift check.
156
+ """
157
+ if not self._file_system.path_exists(dest_dir):
158
+ return set()
159
+ return {
160
+ self._stem_key(name) for name in self._file_system.list_directory(dest_dir)
161
+ }
162
+
163
+ def _entry_is_present(
164
+ self, target_path: str, filename: str, present_stems: set[str]
165
+ ) -> bool:
166
+ """True when the exact file OR a same-stem sibling exists in the directory.
167
+
168
+ ``present_stems`` carries the case-folded stems of the directory entries,
169
+ so a same-stem file under ANY extension counts as present. An empty set
170
+ means the caller disabled stem identity or the directory holds no
171
+ same-stem entry. Single-sources the stem-membership predicate shared by
172
+ the prompt copy routine and the drift check.
173
+ """
174
+ return self._file_system.path_exists(target_path) or (
175
+ self._stem_key(filename) in present_stems
176
+ )
177
+
149
178
  def _prune_same_stem(self, dest_dir: str, filename: str) -> None:
150
179
  """Removes same-stem files with a different name (stem identity).
151
180
 
@@ -183,20 +212,11 @@ class InitService(IInitUseCase):
183
212
  stem_identity = policy.stem_identity
184
213
  if not self._file_system.path_exists(dest_dir):
185
214
  self._file_system.create_directory(dest_dir)
186
- same_stems = (
187
- {
188
- self._stem_key(name)
189
- for name in self._file_system.list_directory(dest_dir)
190
- }
191
- if stem_identity
192
- else set()
193
- )
215
+ present_stems = self._present_stems(dest_dir) if stem_identity else set()
194
216
  count = 0
195
217
  for fname in filenames:
196
218
  target_path = f"{dest_dir}/{fname}"
197
- exists = self._file_system.path_exists(target_path) or (
198
- stem_identity and self._stem_key(fname) in same_stems
199
- )
219
+ exists = self._entry_is_present(target_path, fname, present_stems)
200
220
  if not exists or (overwrite and fname not in create_only):
201
221
  content = resolve_content(fname)
202
222
  if content is not None:
@@ -353,6 +373,7 @@ class InitService(IInitUseCase):
353
373
  dest_dir: str,
354
374
  filenames: Sequence[str],
355
375
  resolve_bundled: Callable[[str], str | None],
376
+ stem_identity: bool = False,
356
377
  ) -> tuple[tuple[str, ...], tuple[str, ...]]:
357
378
  """Partitions ``filenames`` into (edited, missing) against bundled defaults.
358
379
 
@@ -360,14 +381,26 @@ class InitService(IInitUseCase):
360
381
  user copy exists, a bundled default is resolvable, and the two contents
361
382
  differ. Unresolvable bundled defaults are skipped (never reported as
362
383
  drift). Order is preserved from ``filenames`` for deterministic output.
384
+
385
+ When ``stem_identity`` is set (prompt checks only), a destination entry
386
+ sharing an entry's stem under ANY extension (e.g. a pre-migration
387
+ ``.xml``) counts as PRESENT and is reported as EDITED. Such a file
388
+ diverges from the bundled ``.md`` default, so it is not missing. This
389
+ mirrors the stem identity used by the prompt copy routine.
363
390
  """
364
391
  edited: list[str] = []
365
392
  missing: list[str] = []
393
+ present_stems = self._present_stems(dest_dir) if stem_identity else set()
366
394
  for fname in filenames:
367
395
  user_path = f"{dest_dir}/{fname}"
368
- if not self._file_system.path_exists(user_path):
396
+ if not self._entry_is_present(user_path, fname, present_stems):
369
397
  missing.append(fname)
370
398
  continue
399
+ if not self._file_system.path_exists(user_path):
400
+ # Present only as a same-stem sibling (e.g. a stale ``.xml``);
401
+ # it diverges from the bundled ``.md`` default.
402
+ edited.append(fname)
403
+ continue
371
404
  bundled_content = resolve_bundled(fname)
372
405
  if bundled_content is None:
373
406
  continue
@@ -389,6 +422,7 @@ class InitService(IInitUseCase):
389
422
  dest_dir=".teddy/prompts",
390
423
  filenames=_PROMPT_FILES,
391
424
  resolve_bundled=lambda fname: self._get_default_content(f"prompts/{fname}"),
425
+ stem_identity=True,
392
426
  )
393
427
  edited_templates, missing_templates = self._classify_drift(
394
428
  dest_dir="docs/templates",
@@ -80,5 +80,10 @@ Free-form notes recording decisions, deviations, or discoveries during implement
80
80
  <!-- Do NOT include running automated tests here; those are covered by the automated test suite. -->
81
81
 
82
82
  **Format:**
83
- - [ ] **[Title]:** Run `command <args>` and verify output contains `expected output`.
84
- - [ ] **[Title]:** Navigate to `[View/Screen]`, trigger `[Action]`, and confirm `[Observed State/Element]`.
83
+ - [ ] **Title:**
84
+ Run `command <args>`.
85
+ Verify output contains `expected output`.
86
+ - [ ] **Title:**
87
+ Navigate to `[View/Screen]`.
88
+ Trigger `[Action]`.
89
+ Confirm `[Observed State/Element]`.