teddy-cli 0.1.17.dev1187__tar.gz → 0.1.17.dev1189__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 (159) hide show
  1. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/PKG-INFO +1 -1
  2. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/pyproject.toml +1 -1
  3. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/services/prompt_manager.py +62 -3
  4. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/.gitignore +0 -0
  5. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/LICENSE +0 -0
  6. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/__init__.py +0 -0
  7. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/__main__.py +0 -0
  8. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/adapters/__init__.py +0 -0
  9. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/adapters/inbound/__init__.py +0 -0
  10. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/adapters/inbound/cli_formatter.py +0 -0
  11. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/adapters/inbound/cli_helpers.py +0 -0
  12. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/adapters/inbound/session_cli_handlers.py +0 -0
  13. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/adapters/inbound/textual_plan_reviewer.py +0 -0
  14. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_app.py +0 -0
  15. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_editor.py +0 -0
  16. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_execution.py +0 -0
  17. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_helpers.py +0 -0
  18. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_logic.py +0 -0
  19. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_previews.py +0 -0
  20. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_widgets.py +0 -0
  21. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/adapters/outbound/__init__.py +0 -0
  22. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/adapters/outbound/console_interactor.py +0 -0
  23. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/adapters/outbound/console_interactor_ask_loop.py +0 -0
  24. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/adapters/outbound/console_interactor_helpers.py +0 -0
  25. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/adapters/outbound/console_tooling.py +0 -0
  26. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/adapters/outbound/filesystem_helpers.py +0 -0
  27. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/adapters/outbound/litellm_adapter.py +0 -0
  28. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/adapters/outbound/local_file_system_adapter.py +0 -0
  29. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/adapters/outbound/local_repo_tree_generator.py +0 -0
  30. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/adapters/outbound/openrouter_hydrator.py +0 -0
  31. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/adapters/outbound/shell_adapter.py +0 -0
  32. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/adapters/outbound/shell_command_builder.py +0 -0
  33. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/adapters/outbound/suppressed_logging.py +0 -0
  34. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/adapters/outbound/system_environment_adapter.py +0 -0
  35. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/adapters/outbound/system_environment_inspector.py +0 -0
  36. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/adapters/outbound/system_time_adapter.py +0 -0
  37. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/adapters/outbound/terminal_quit_key_listener.py +0 -0
  38. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/adapters/outbound/web_scraper_adapter.py +0 -0
  39. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/adapters/outbound/web_searcher_adapter.py +0 -0
  40. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/adapters/outbound/yaml_config_adapter.py +0 -0
  41. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/container.py +0 -0
  42. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/__init__.py +0 -0
  43. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/domain/__init__.py +0 -0
  44. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/domain/models/__init__.py +0 -0
  45. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/domain/models/action_ports.py +0 -0
  46. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/domain/models/change_set.py +0 -0
  47. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/domain/models/exceptions.py +0 -0
  48. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/domain/models/execution_report.py +0 -0
  49. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/domain/models/orchestrator_ports.py +0 -0
  50. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/domain/models/plan.py +0 -0
  51. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/domain/models/planning_ports.py +0 -0
  52. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/domain/models/project_context.py +0 -0
  53. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/domain/models/report_assembly_data.py +0 -0
  54. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/domain/models/session.py +0 -0
  55. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/domain/models/shell_output.py +0 -0
  56. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/domain/models/web_search_results.py +0 -0
  57. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/ports/__init__.py +0 -0
  58. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/ports/inbound/__init__.py +0 -0
  59. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/ports/inbound/edit_simulator.py +0 -0
  60. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/ports/inbound/get_context_use_case.py +0 -0
  61. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/ports/inbound/init.py +0 -0
  62. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/ports/inbound/plan_parser.py +0 -0
  63. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/ports/inbound/plan_reviewer.py +0 -0
  64. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/ports/inbound/plan_validator.py +0 -0
  65. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/ports/inbound/planning_use_case.py +0 -0
  66. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/ports/inbound/run_plan_use_case.py +0 -0
  67. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/ports/outbound/__init__.py +0 -0
  68. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/ports/outbound/config_service.py +0 -0
  69. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/ports/outbound/environment_inspector.py +0 -0
  70. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/ports/outbound/execution_report_assembler.py +0 -0
  71. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/ports/outbound/file_system_manager.py +0 -0
  72. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/ports/outbound/llm_client.py +0 -0
  73. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/ports/outbound/markdown_report_formatter.py +0 -0
  74. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/ports/outbound/prompt_manager.py +0 -0
  75. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/ports/outbound/quit_key_listener.py +0 -0
  76. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/ports/outbound/repo_tree_generator.py +0 -0
  77. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/ports/outbound/session_loop_guard.py +0 -0
  78. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/ports/outbound/session_manager.py +0 -0
  79. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/ports/outbound/session_repository.py +0 -0
  80. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/ports/outbound/shell_executor.py +0 -0
  81. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/ports/outbound/system_environment.py +0 -0
  82. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/ports/outbound/time_service.py +0 -0
  83. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/ports/outbound/user_interactor.py +0 -0
  84. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/ports/outbound/web_scraper.py +0 -0
  85. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/ports/outbound/web_searcher.py +0 -0
  86. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/services/__init__.py +0 -0
  87. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/services/action_changeset_builder.py +0 -0
  88. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/services/action_diff_manager.py +0 -0
  89. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/services/action_dispatcher.py +0 -0
  90. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/services/action_executor.py +0 -0
  91. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/services/action_factory.py +0 -0
  92. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/services/action_parser_complex.py +0 -0
  93. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/services/action_parser_strategies.py +0 -0
  94. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/services/context_service.py +0 -0
  95. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/services/edit_simulator.py +0 -0
  96. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/services/execution_orchestrator.py +0 -0
  97. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/services/execution_report_assembler.py +0 -0
  98. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/services/init_service.py +0 -0
  99. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/services/markdown_plan_parser.py +0 -0
  100. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/services/markdown_report_formatter.py +0 -0
  101. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/services/parser_infrastructure.py +0 -0
  102. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/services/parser_metadata.py +0 -0
  103. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/services/parser_reporting.py +0 -0
  104. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/services/plan_validator.py +0 -0
  105. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/services/planning_service.py +0 -0
  106. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/services/session_lifecycle_manager.py +0 -0
  107. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/services/session_loop_guard.py +0 -0
  108. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/services/session_orchestrator.py +0 -0
  109. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/services/session_planner.py +0 -0
  110. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/services/session_pruning_service.py +0 -0
  111. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/services/session_replanner.py +0 -0
  112. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/services/session_repository.py +0 -0
  113. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/services/session_service.py +0 -0
  114. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/services/templates/execution_report.md.j2 +0 -0
  115. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/services/update_checker.py +0 -0
  116. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/services/validation_rules/__init__.py +0 -0
  117. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/services/validation_rules/edit.py +0 -0
  118. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/services/validation_rules/edit_matcher.py +0 -0
  119. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/services/validation_rules/edit_matcher_heuristics.py +0 -0
  120. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/services/validation_rules/execute.py +0 -0
  121. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/services/validation_rules/filesystem.py +0 -0
  122. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/services/validation_rules/helpers.py +0 -0
  123. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/services/validation_rules/message.py +0 -0
  124. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/utils/__init__.py +0 -0
  125. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/utils/diff.py +0 -0
  126. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/utils/interrupt_guard.py +0 -0
  127. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/utils/io.py +0 -0
  128. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/utils/markdown.py +0 -0
  129. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/utils/serialization.py +0 -0
  130. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/utils/stdin_ownership.py +0 -0
  131. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/utils/string.py +0 -0
  132. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/core/utils/terminal.py +0 -0
  133. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/prompts.py +0 -0
  134. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/registries/__init__.py +0 -0
  135. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/registries/infrastructure.py +0 -0
  136. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/registries/reviewer.py +0 -0
  137. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/registries/validators.py +0 -0
  138. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/resources/MRP.xml +0 -0
  139. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/resources/__init__.py +0 -0
  140. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/resources/config/__init__.py +0 -0
  141. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/resources/config/config.yaml +0 -0
  142. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/resources/config/init.context +0 -0
  143. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/resources/config/prompts/architect.xml +0 -0
  144. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/resources/config/prompts/assistant.xml +0 -0
  145. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/resources/config/prompts/debugger.xml +0 -0
  146. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/resources/config/prompts/developer.xml +0 -0
  147. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/resources/config/prompts/pathfinder.xml +0 -0
  148. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/resources/config/prompts/prototyper.xml +0 -0
  149. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/resources/templates/ARCHITECTURE.md +0 -0
  150. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/resources/templates/PROJECT.md +0 -0
  151. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/resources/templates/case-file.md +0 -0
  152. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/resources/templates/ci.md +0 -0
  153. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/resources/templates/component-design.md +0 -0
  154. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/resources/templates/makefile.md +0 -0
  155. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/resources/templates/milestone.md +0 -0
  156. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/resources/templates/pre-commit.md +0 -0
  157. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/resources/templates/specification-document.md +0 -0
  158. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/src/teddy_executor/resources/templates/task-brief.md +0 -0
  159. {teddy_cli-0.1.17.dev1187 → teddy_cli-0.1.17.dev1189}/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.dev1187
3
+ Version: 0.1.17.dev1189
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.dev1187"
3
+ version = "0.1.17.dev1189"
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" }
@@ -1,11 +1,22 @@
1
+ from importlib import resources
2
+ import logging
1
3
  from pathlib import Path
2
4
  from typing import Any, Dict, Optional
5
+
3
6
  import yaml
7
+
4
8
  from teddy_executor.core.ports.outbound.file_system_manager import IFileSystemManager
5
9
  from teddy_executor.core.ports.outbound.user_interactor import IUserInteractor
6
10
  from teddy_executor.core.ports.outbound.prompt_manager import IPromptManager
7
11
  from teddy_executor.core.utils.serialization import scrub_dict_for_serialization
8
12
 
13
+ # The bundled Markdown Response Protocol base prompt. It lives OUTSIDE
14
+ # ``config/prompts/`` so it is never grouped with the user-overridable agent
15
+ # prompts, and is loaded as a package resource rather than via the file system
16
+ # port.
17
+ _MRP_PACKAGE = "teddy_executor.resources"
18
+ _MRP_FILENAME = "MRP.xml"
19
+
9
20
 
10
21
  class PromptManager(IPromptManager):
11
22
  """
@@ -16,9 +27,15 @@ class PromptManager(IPromptManager):
16
27
  self,
17
28
  file_system_manager: IFileSystemManager,
18
29
  user_interactor: IUserInteractor = None, # type: ignore
30
+ mrp_resource_root: Any = None,
19
31
  ):
20
32
  self._file_system_manager = file_system_manager
21
33
  self._user_interactor = user_interactor
34
+ # Injectable resource seam: a Traversable (or any object exposing the
35
+ # ``Traversable`` contract — ``is_file`` + ``read_text``) that anchors
36
+ # ``MRP.xml``. When ``None``, the bundled package resource is resolved
37
+ # lazily. Tests inject a real ``pathlib.Path`` to avoid global patching.
38
+ self._mrp_resource_root = mrp_resource_root
22
39
 
23
40
  def get_prompt_content(self, agent_name: str) -> Optional[str]:
24
41
  """Synchronously retrieves the raw content of an agent prompt."""
@@ -77,7 +94,13 @@ class PromptManager(IPromptManager):
77
94
  return f"{directory}/{f}"
78
95
  return None
79
96
 
80
- def fetch_system_prompt(self, agent_name: str, turn_path: Path) -> str:
97
+ def _resolve_agent_prompt_content(self, agent_name: str, turn_path: Path) -> str:
98
+ """Resolves the agent-specific prompt XML from the filesystem hierarchy.
99
+
100
+ Searches the session root first, then the canonical ``.teddy/prompts/``
101
+ directory. Returns an empty string (with a warning) when no prompt file
102
+ is found, preserving the graceful-degradation contract.
103
+ """
81
104
  # 1. Try Session-Root override (Current standard)
82
105
  session_root_prompt = self._find_prompt_file(
83
106
  turn_path.parent.as_posix(), agent_name
@@ -93,8 +116,6 @@ class PromptManager(IPromptManager):
93
116
  if teddy_prompt_path:
94
117
  return self._file_system_manager.read_file(teddy_prompt_path)
95
118
 
96
- import logging
97
-
98
119
  logging.getLogger(__name__).warning(
99
120
  "PromptManager: Failed to resolve system prompt for agent '%s' (searched %s and %s)",
100
121
  agent_name,
@@ -103,6 +124,44 @@ class PromptManager(IPromptManager):
103
124
  )
104
125
  return ""
105
126
 
127
+ def _load_mrp_base_prompt(self) -> str:
128
+ """Loads the bundled Markdown Response Protocol base prompt.
129
+
130
+ Uses only the ``Traversable`` contract (``is_file`` + ``read_text``) so
131
+ it works both in a source checkout (``pathlib.Path``) and under a
132
+ zip/wheel install (``zipfile.Path``). Fails fast when the resource is
133
+ absent to prevent silent protocol degradation.
134
+ """
135
+ root = self._mrp_resource_root
136
+ if root is None:
137
+ root = resources.files(_MRP_PACKAGE)
138
+ resource = root / _MRP_FILENAME
139
+ if not resource.is_file():
140
+ raise FileNotFoundError(
141
+ f"Bundled MRP base prompt not found at {resource}. "
142
+ f"The package resource '{_MRP_PACKAGE}/{_MRP_FILENAME}' is missing."
143
+ )
144
+ return resource.read_text(encoding="utf-8")
145
+
146
+ def fetch_system_prompt(self, agent_name: str, turn_path: Path) -> str:
147
+ content = self._resolve_agent_prompt_content(agent_name, turn_path)
148
+ if not content:
149
+ # No agent prompt resolved: preserve the historical empty-string
150
+ # contract (no header, no MRP) rather than fabricating a prompt.
151
+ return ""
152
+
153
+ assembled = f"Agent Name: {agent_name.capitalize()}\n\n{content}"
154
+
155
+ # Legacy compatibility: a resolved prompt that already carries its own
156
+ # response format (e.g. a customized ``.teddy/prompts/`` override) is
157
+ # returned without the shared MRP block, but keeps the agent-name header.
158
+ if "<response_format>" in content:
159
+ return assembled
160
+
161
+ # Both the agent-specific XML and the MRP block live inside the
162
+ # assembled ``<system>`` prompt; MRP is appended AFTER the agent content.
163
+ return f"{assembled}\n\n{self._load_mrp_base_prompt()}"
164
+
106
165
  def log_telemetry(self, token_count: Any, turn_cost: Any) -> float:
107
166
  def safe_float(v: Any, default: float = 0.0) -> float:
108
167
  try: