teddy-cli 0.1.17.dev1402__tar.gz → 0.1.17.dev1404__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 (165) hide show
  1. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/PKG-INFO +24 -24
  2. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/README.md +23 -23
  3. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/pyproject.toml +1 -1
  4. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/adapters/inbound/session_cli_handlers.py +35 -13
  5. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/resources/MRP.md +1 -1
  6. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/.gitignore +0 -0
  7. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/LICENSE +0 -0
  8. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/__init__.py +0 -0
  9. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/__main__.py +0 -0
  10. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/adapters/__init__.py +0 -0
  11. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/adapters/inbound/__init__.py +0 -0
  12. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/adapters/inbound/cli_formatter.py +0 -0
  13. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/adapters/inbound/cli_helpers.py +0 -0
  14. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/adapters/inbound/textual_plan_reviewer.py +0 -0
  15. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_app.py +0 -0
  16. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_editor.py +0 -0
  17. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_execution.py +0 -0
  18. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_helpers.py +0 -0
  19. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_logic.py +0 -0
  20. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_previews.py +0 -0
  21. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_widgets.py +0 -0
  22. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/adapters/outbound/__init__.py +0 -0
  23. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/adapters/outbound/console_interactor.py +0 -0
  24. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/adapters/outbound/console_interactor_ask_loop.py +0 -0
  25. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/adapters/outbound/console_interactor_helpers.py +0 -0
  26. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/adapters/outbound/console_tooling.py +0 -0
  27. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/adapters/outbound/filesystem_helpers.py +0 -0
  28. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/adapters/outbound/litellm_adapter.py +0 -0
  29. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/adapters/outbound/local_file_system_adapter.py +0 -0
  30. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/adapters/outbound/local_repo_tree_generator.py +0 -0
  31. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/adapters/outbound/openrouter_hydrator.py +0 -0
  32. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/adapters/outbound/shell_adapter.py +0 -0
  33. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/adapters/outbound/shell_command_builder.py +0 -0
  34. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/adapters/outbound/suppressed_logging.py +0 -0
  35. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/adapters/outbound/system_environment_adapter.py +0 -0
  36. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/adapters/outbound/system_environment_inspector.py +0 -0
  37. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/adapters/outbound/system_time_adapter.py +0 -0
  38. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/adapters/outbound/terminal_quit_key_listener.py +0 -0
  39. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/adapters/outbound/web_scraper_adapter.py +0 -0
  40. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/adapters/outbound/web_searcher_adapter.py +0 -0
  41. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/adapters/outbound/yaml_config_adapter.py +0 -0
  42. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/container.py +0 -0
  43. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/__init__.py +0 -0
  44. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/domain/__init__.py +0 -0
  45. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/domain/models/__init__.py +0 -0
  46. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/domain/models/action_ports.py +0 -0
  47. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/domain/models/change_set.py +0 -0
  48. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/domain/models/config_schema.py +0 -0
  49. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/domain/models/drift_report.py +0 -0
  50. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/domain/models/exceptions.py +0 -0
  51. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/domain/models/execution_report.py +0 -0
  52. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/domain/models/orchestrator_ports.py +0 -0
  53. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/domain/models/plan.py +0 -0
  54. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/domain/models/planning_ports.py +0 -0
  55. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/domain/models/project_context.py +0 -0
  56. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/domain/models/report_assembly_data.py +0 -0
  57. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/domain/models/session.py +0 -0
  58. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/domain/models/shell_output.py +0 -0
  59. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/domain/models/web_search_results.py +0 -0
  60. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/ports/__init__.py +0 -0
  61. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/ports/inbound/__init__.py +0 -0
  62. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/ports/inbound/edit_simulator.py +0 -0
  63. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/ports/inbound/get_context_use_case.py +0 -0
  64. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/ports/inbound/init.py +0 -0
  65. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/ports/inbound/plan_parser.py +0 -0
  66. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/ports/inbound/plan_reviewer.py +0 -0
  67. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/ports/inbound/plan_validator.py +0 -0
  68. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/ports/inbound/planning_use_case.py +0 -0
  69. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/ports/inbound/run_plan_use_case.py +0 -0
  70. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/ports/outbound/__init__.py +0 -0
  71. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/ports/outbound/config_service.py +0 -0
  72. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/ports/outbound/environment_inspector.py +0 -0
  73. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/ports/outbound/execution_report_assembler.py +0 -0
  74. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/ports/outbound/file_system_manager.py +0 -0
  75. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/ports/outbound/llm_client.py +0 -0
  76. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/ports/outbound/markdown_report_formatter.py +0 -0
  77. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/ports/outbound/prompt_manager.py +0 -0
  78. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/ports/outbound/quit_key_listener.py +0 -0
  79. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/ports/outbound/repo_tree_generator.py +0 -0
  80. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/ports/outbound/session_loop_guard.py +0 -0
  81. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/ports/outbound/session_manager.py +0 -0
  82. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/ports/outbound/session_repository.py +0 -0
  83. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/ports/outbound/shell_executor.py +0 -0
  84. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/ports/outbound/system_environment.py +0 -0
  85. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/ports/outbound/time_service.py +0 -0
  86. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/ports/outbound/user_interactor.py +0 -0
  87. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/ports/outbound/web_scraper.py +0 -0
  88. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/ports/outbound/web_searcher.py +0 -0
  89. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/services/__init__.py +0 -0
  90. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/services/action_changeset_builder.py +0 -0
  91. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/services/action_diff_manager.py +0 -0
  92. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/services/action_dispatcher.py +0 -0
  93. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/services/action_executor.py +0 -0
  94. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/services/action_factory.py +0 -0
  95. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/services/action_parser_complex.py +0 -0
  96. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/services/action_parser_strategies.py +0 -0
  97. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/services/context_service.py +0 -0
  98. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/services/edit_simulator.py +0 -0
  99. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/services/execution_orchestrator.py +0 -0
  100. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/services/execution_report_assembler.py +0 -0
  101. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/services/init_service.py +0 -0
  102. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/services/markdown_plan_parser.py +0 -0
  103. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/services/markdown_report_formatter.py +0 -0
  104. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/services/parser_infrastructure.py +0 -0
  105. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/services/parser_metadata.py +0 -0
  106. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/services/parser_reporting.py +0 -0
  107. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/services/plan_validator.py +0 -0
  108. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/services/planning_service.py +0 -0
  109. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/services/prompt_manager.py +0 -0
  110. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/services/session_lifecycle_manager.py +0 -0
  111. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/services/session_loop_guard.py +0 -0
  112. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/services/session_orchestrator.py +0 -0
  113. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/services/session_planner.py +0 -0
  114. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/services/session_pruning_service.py +0 -0
  115. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/services/session_replanner.py +0 -0
  116. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/services/session_repository.py +0 -0
  117. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/services/session_service.py +0 -0
  118. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/services/templates/execution_report.md.j2 +0 -0
  119. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/services/update_checker.py +0 -0
  120. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/services/validation_rules/__init__.py +0 -0
  121. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/services/validation_rules/edit.py +0 -0
  122. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/services/validation_rules/edit_matcher.py +0 -0
  123. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/services/validation_rules/edit_matcher_heuristics.py +0 -0
  124. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/services/validation_rules/execute.py +0 -0
  125. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/services/validation_rules/filesystem.py +0 -0
  126. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/services/validation_rules/helpers.py +0 -0
  127. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/services/validation_rules/message.py +0 -0
  128. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/utils/__init__.py +0 -0
  129. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/utils/diff.py +0 -0
  130. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/utils/editor_names.py +0 -0
  131. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/utils/interrupt_guard.py +0 -0
  132. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/utils/interruptible_call.py +0 -0
  133. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/utils/io.py +0 -0
  134. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/utils/markdown.py +0 -0
  135. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/utils/paths.py +0 -0
  136. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/utils/serialization.py +0 -0
  137. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/utils/session_notices.py +0 -0
  138. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/utils/stdin_ownership.py +0 -0
  139. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/utils/string.py +0 -0
  140. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/core/utils/terminal.py +0 -0
  141. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/prompts.py +0 -0
  142. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/registries/__init__.py +0 -0
  143. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/registries/infrastructure.py +0 -0
  144. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/registries/reviewer.py +0 -0
  145. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/registries/validators.py +0 -0
  146. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/resources/__init__.py +0 -0
  147. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/resources/config/__init__.py +0 -0
  148. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/resources/config/config.yaml +0 -0
  149. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/resources/config/init.context +0 -0
  150. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/resources/config/prompts/architect.md +0 -0
  151. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/resources/config/prompts/assistant.md +0 -0
  152. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/resources/config/prompts/debugger.md +0 -0
  153. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/resources/config/prompts/developer.md +0 -0
  154. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/resources/config/prompts/pathfinder.md +0 -0
  155. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/resources/config/prompts/prototyper.md +0 -0
  156. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/resources/templates/ARCHITECTURE.md +0 -0
  157. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/resources/templates/PROJECT.md +0 -0
  158. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/resources/templates/case-file.md +0 -0
  159. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/resources/templates/ci.md +0 -0
  160. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/resources/templates/component-design.md +0 -0
  161. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/resources/templates/makefile.md +0 -0
  162. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/resources/templates/milestone.md +0 -0
  163. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/resources/templates/pre-commit.md +0 -0
  164. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/src/teddy_executor/resources/templates/specification-document.md +0 -0
  165. {teddy_cli-0.1.17.dev1402 → teddy_cli-0.1.17.dev1404}/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.dev1402
3
+ Version: 0.1.17.dev1404
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
@@ -270,17 +270,29 @@ teddy resume -m "your next instruction"
270
270
 
271
271
  ### Optional Flags
272
272
 
273
- | Flag | Description |
274
- | :----------------- | :-------------------------------------------------------------------------------------------------------------------------------------------- |
275
- | `--agent`, `-a` | Select agent persona (`pathfinder`, `architect`, `developer`, `debugger`, `assistant`). Default: `pathfinder` (`assistant` in pipeline mode). |
276
- | `--context`, `-c` | Supply additional context files or directories. Repeatable (`-c a.py -c b.md`) or comma-separated (`-c "a.py,b.md"`). |
277
- | `--model` | Override the default configured model. |
278
- | `--yolo`, `-y` | Auto-approve all actions. To make this default, set `yolo_default: true` in `.teddy/config.yaml`. |
279
- | `--no-yolo`, `-n` | Force interactive mode for a single run. |
280
- | `--message`, `-m` | Initial instruction to pass directly to the agent. |
281
- | `--pipeline`, `-p` | Pipeline mode. Auto-approves actions, requires `-m`, exits immediately after the first message turn, and defaults to the `assistant` agent. |
282
- | `--max-turns` | Maximum turns for a non-interactive run. Overrides `guardrails.max_turns` in `.teddy/config.yaml`. |
283
- | `--max-cost` | Maximum session cost in dollars for a non-interactive run. Overrides `guardrails.max_session_cost` in `.teddy/config.yaml`. |
273
+ | Flag | Description |
274
+ | :--- | :--- |
275
+ | <nobr>`--agent`, `-a`</nobr> | Select agent persona (`pathfinder`, `architect`, `developer`, `debugger`, `assistant`). Default: `pathfinder` (`assistant` in pipeline mode). |
276
+ | <nobr>`--context`, `-c`</nobr> | Supply additional context files or directories. Repeatable (`-c a.py -c b.md`) or comma-separated (`-c "a.py,b.md"`). |
277
+ | <nobr>`--model`</nobr> | Override the default configured model. |
278
+ | <nobr>`--yolo`, `-y`</nobr> | Auto-approve all actions. To make this default, set `yolo_default: true` in `.teddy/config.yaml`. |
279
+ | <nobr>`--no-yolo`, `-n`</nobr> | Force interactive mode for a single run. |
280
+ | <nobr>`--message`, `-m`</nobr> | Initial instruction to pass directly to the agent. |
281
+ | <nobr>`--pipeline`, `-p`</nobr> | Pipeline mode. Auto-approves actions, requires `-m`, exits immediately after the first message turn, and defaults to the `assistant` agent. |
282
+ | <nobr>`--max-turns`</nobr> | Maximum turns for a non-interactive run. Overrides `guardrails.max_turns` in `.teddy/config.yaml`. |
283
+ | <nobr>`--max-cost`</nobr> | Maximum session cost in dollars for a non-interactive run. Overrides `guardrails.max_session_cost` in `.teddy/config.yaml`. |
284
+
285
+ ### Chat-Oriented Workflow (CHOP)
286
+
287
+ You do not need API keys or per-token billing to use TeDDy. If you already have an active subscription (ChatGPT, Claude, Gemini, etc.), you can also use TeDDy to practice **[Chat-Oriented Programming (CHOP)](https://arxiv.org/html/2510.10819v1#S2.2)** from your web browser.
288
+
289
+ TeDDy packages your workspace context into a single clipboard payload, and the agent prompts instruct the model to automatically format its response as an executable, self-contained Markdown plan.
290
+
291
+ 1. **Set the system instructions:** Copy your chosen agent persona's prompt with `teddy get-prompt <agent_name>` and paste it into your web interface's system prompt or custom instructions field.
292
+ 2. **Bundle project context:** Export your workspace context to the clipboard with `teddy context` (see [Exporting Context](#exporting-context)). This bundles system information, current git status, project structure, and the full verbatim contents of all files listed in `.teddy/init.context` into a single Markdown payload.
293
+ 3. **Prompt the AI:** Paste the context payload into the chat alongside your task request. Guided by the system instructions, the model will automatically structure its response as an executable Markdown plan.
294
+ 4. **Apply changes:** Copy the full Markdown plan to your clipboard and run `teddy execute` to validate, review diffs, and apply approved changes automatically, or copy and run individual snippets manually as you would in standard CHOP.
295
+ 5. **Report back:** When `teddy execute` finishes, it automatically copies a concise execution report back to your clipboard to paste into the chat.
284
296
 
285
297
  ### Exporting Context
286
298
 
@@ -307,18 +319,6 @@ teddy context -c review.context
307
319
 
308
320
  `--only` requires at least one `-c` value. Without one the command exits with a usage error, because an empty explicit set would export no files.
309
321
 
310
- ### Chat-Oriented Workflow (CHOP)
311
-
312
- You do not need API keys or per-token billing to use TeDDy. If you already have an active subscription (ChatGPT, Claude, Gemini, etc.), you can also use TeDDy to practice **[Chat-Oriented Programming (CHOP)](https://sourcegraph.com/blog/chat-oriented-programming-in-action)** from your web browser.
313
-
314
- TeDDy packages your workspace context into a single clipboard payload, and the agent prompts instruct the model to automatically format its response as an executable, self-contained Markdown plan.
315
-
316
- 1. **Set the system instructions:** Copy your chosen agent persona's prompt with `teddy get-prompt <agent_name>` and paste it into your web interface's system prompt or custom instructions field.
317
- 2. **Bundle project context:** Export your workspace context to the clipboard with `teddy context`. This bundles system information, current git status, project structure, and the full verbatim contents of all files listed in `.teddy/init.context` into a single Markdown payload.
318
- 3. **Prompt the AI:** Paste the context payload into the chat alongside your task request. Guided by the system instructions, the model will automatically structure its response as an executable Markdown plan.
319
- 4. **Apply changes:** Copy the full Markdown plan to your clipboard and run `teddy execute` to validate, review diffs, and apply approved changes automatically, or copy and run individual snippets manually as you would in standard CHOP.
320
- 5. **Report back:** When `teddy execute` finishes, it automatically copies a concise execution report back to your clipboard to paste into the chat.
321
-
322
322
  ---
323
323
 
324
324
  ## Command Reference
@@ -236,17 +236,29 @@ teddy resume -m "your next instruction"
236
236
 
237
237
  ### Optional Flags
238
238
 
239
- | Flag | Description |
240
- | :----------------- | :-------------------------------------------------------------------------------------------------------------------------------------------- |
241
- | `--agent`, `-a` | Select agent persona (`pathfinder`, `architect`, `developer`, `debugger`, `assistant`). Default: `pathfinder` (`assistant` in pipeline mode). |
242
- | `--context`, `-c` | Supply additional context files or directories. Repeatable (`-c a.py -c b.md`) or comma-separated (`-c "a.py,b.md"`). |
243
- | `--model` | Override the default configured model. |
244
- | `--yolo`, `-y` | Auto-approve all actions. To make this default, set `yolo_default: true` in `.teddy/config.yaml`. |
245
- | `--no-yolo`, `-n` | Force interactive mode for a single run. |
246
- | `--message`, `-m` | Initial instruction to pass directly to the agent. |
247
- | `--pipeline`, `-p` | Pipeline mode. Auto-approves actions, requires `-m`, exits immediately after the first message turn, and defaults to the `assistant` agent. |
248
- | `--max-turns` | Maximum turns for a non-interactive run. Overrides `guardrails.max_turns` in `.teddy/config.yaml`. |
249
- | `--max-cost` | Maximum session cost in dollars for a non-interactive run. Overrides `guardrails.max_session_cost` in `.teddy/config.yaml`. |
239
+ | Flag | Description |
240
+ | :--- | :--- |
241
+ | <nobr>`--agent`, `-a`</nobr> | Select agent persona (`pathfinder`, `architect`, `developer`, `debugger`, `assistant`). Default: `pathfinder` (`assistant` in pipeline mode). |
242
+ | <nobr>`--context`, `-c`</nobr> | Supply additional context files or directories. Repeatable (`-c a.py -c b.md`) or comma-separated (`-c "a.py,b.md"`). |
243
+ | <nobr>`--model`</nobr> | Override the default configured model. |
244
+ | <nobr>`--yolo`, `-y`</nobr> | Auto-approve all actions. To make this default, set `yolo_default: true` in `.teddy/config.yaml`. |
245
+ | <nobr>`--no-yolo`, `-n`</nobr> | Force interactive mode for a single run. |
246
+ | <nobr>`--message`, `-m`</nobr> | Initial instruction to pass directly to the agent. |
247
+ | <nobr>`--pipeline`, `-p`</nobr> | Pipeline mode. Auto-approves actions, requires `-m`, exits immediately after the first message turn, and defaults to the `assistant` agent. |
248
+ | <nobr>`--max-turns`</nobr> | Maximum turns for a non-interactive run. Overrides `guardrails.max_turns` in `.teddy/config.yaml`. |
249
+ | <nobr>`--max-cost`</nobr> | Maximum session cost in dollars for a non-interactive run. Overrides `guardrails.max_session_cost` in `.teddy/config.yaml`. |
250
+
251
+ ### Chat-Oriented Workflow (CHOP)
252
+
253
+ You do not need API keys or per-token billing to use TeDDy. If you already have an active subscription (ChatGPT, Claude, Gemini, etc.), you can also use TeDDy to practice **[Chat-Oriented Programming (CHOP)](https://arxiv.org/html/2510.10819v1#S2.2)** from your web browser.
254
+
255
+ TeDDy packages your workspace context into a single clipboard payload, and the agent prompts instruct the model to automatically format its response as an executable, self-contained Markdown plan.
256
+
257
+ 1. **Set the system instructions:** Copy your chosen agent persona's prompt with `teddy get-prompt <agent_name>` and paste it into your web interface's system prompt or custom instructions field.
258
+ 2. **Bundle project context:** Export your workspace context to the clipboard with `teddy context` (see [Exporting Context](#exporting-context)). This bundles system information, current git status, project structure, and the full verbatim contents of all files listed in `.teddy/init.context` into a single Markdown payload.
259
+ 3. **Prompt the AI:** Paste the context payload into the chat alongside your task request. Guided by the system instructions, the model will automatically structure its response as an executable Markdown plan.
260
+ 4. **Apply changes:** Copy the full Markdown plan to your clipboard and run `teddy execute` to validate, review diffs, and apply approved changes automatically, or copy and run individual snippets manually as you would in standard CHOP.
261
+ 5. **Report back:** When `teddy execute` finishes, it automatically copies a concise execution report back to your clipboard to paste into the chat.
250
262
 
251
263
  ### Exporting Context
252
264
 
@@ -273,18 +285,6 @@ teddy context -c review.context
273
285
 
274
286
  `--only` requires at least one `-c` value. Without one the command exits with a usage error, because an empty explicit set would export no files.
275
287
 
276
- ### Chat-Oriented Workflow (CHOP)
277
-
278
- You do not need API keys or per-token billing to use TeDDy. If you already have an active subscription (ChatGPT, Claude, Gemini, etc.), you can also use TeDDy to practice **[Chat-Oriented Programming (CHOP)](https://sourcegraph.com/blog/chat-oriented-programming-in-action)** from your web browser.
279
-
280
- TeDDy packages your workspace context into a single clipboard payload, and the agent prompts instruct the model to automatically format its response as an executable, self-contained Markdown plan.
281
-
282
- 1. **Set the system instructions:** Copy your chosen agent persona's prompt with `teddy get-prompt <agent_name>` and paste it into your web interface's system prompt or custom instructions field.
283
- 2. **Bundle project context:** Export your workspace context to the clipboard with `teddy context`. This bundles system information, current git status, project structure, and the full verbatim contents of all files listed in `.teddy/init.context` into a single Markdown payload.
284
- 3. **Prompt the AI:** Paste the context payload into the chat alongside your task request. Guided by the system instructions, the model will automatically structure its response as an executable Markdown plan.
285
- 4. **Apply changes:** Copy the full Markdown plan to your clipboard and run `teddy execute` to validate, review diffs, and apply approved changes automatically, or copy and run individual snippets manually as you would in standard CHOP.
286
- 5. **Report back:** When `teddy execute` finishes, it automatically copies a concise execution report back to your clipboard to paste into the chat.
287
-
288
288
  ---
289
289
 
290
290
  ## Command Reference
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "teddy-cli"
3
- version = "0.1.17.dev1402"
3
+ version = "0.1.17.dev1404"
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 = [
@@ -285,6 +285,7 @@ def _run_health_checks(config_service: IConfigService) -> None:
285
285
  _GIT_PULL_TIMEOUT_SECONDS = 15
286
286
  _PULL_SKIPPED_WARNING = "⚠ Workspace pull skipped; continuing with the current branch."
287
287
  _PULL_TIMEOUT_WARNING = "⚠ Workspace pull timed out; continuing without it."
288
+ _PULL_GIT_UNAVAILABLE_WARNING = "⚠ Workspace pull skipped; git is unavailable."
288
289
  _IN_PROGRESS_GIT_MARKERS = (
289
290
  "rebase-merge",
290
291
  "rebase-apply",
@@ -293,6 +294,16 @@ _IN_PROGRESS_GIT_MARKERS = (
293
294
  )
294
295
 
295
296
 
297
+ def _warn_pull(message: str) -> None:
298
+ """Print one yellow pull warning followed by a blank line.
299
+
300
+ The trailing blank line keeps every pull block, success or warning, the
301
+ same height before the ``Checking configurations...`` line.
302
+ """
303
+ typer.secho(message, fg=typer.colors.YELLOW, err=True)
304
+ typer.echo("", err=True)
305
+
306
+
296
307
  def _pull_workspace_on_start(
297
308
  config_service: IConfigService,
298
309
  run_func: Optional[Callable[..., Any]] = None,
@@ -303,8 +314,9 @@ def _pull_workspace_on_start(
303
314
  a Git repository, so a disabled toggle or a non-repository directory stays
304
315
  silent. A detached HEAD, a missing upstream, or an in-progress operation
305
316
  also stays silent, because there is nothing safe to fast-forward. A dirty
306
- worktree or a failed pull reports one warning and leaves the workspace
307
- unchanged. A successful fast-forward names the number of commits it moved.
317
+ worktree, a failed pull, a timeout, or an unavailable git binary reports
318
+ one warning and leaves the workspace unchanged. A successful fast-forward
319
+ names the number of commits it moved.
308
320
 
309
321
  The Git process is injected through ``run_func`` so every decision is
310
322
  testable without spawning a real repository.
@@ -317,7 +329,9 @@ def _pull_workspace_on_start(
317
329
  try:
318
330
  _fast_forward_workspace(git_run)
319
331
  except subprocess.TimeoutExpired:
320
- typer.secho(_PULL_TIMEOUT_WARNING, fg=typer.colors.YELLOW, err=True)
332
+ _warn_pull(_PULL_TIMEOUT_WARNING)
333
+ except OSError:
334
+ _warn_pull(_PULL_GIT_UNAVAILABLE_WARNING)
321
335
 
322
336
 
323
337
  def _fast_forward_workspace(git_run: Callable[..., Any]) -> None:
@@ -330,7 +344,7 @@ def _fast_forward_workspace(git_run: Callable[..., Any]) -> None:
330
344
  skip_reason = _pull_skip_reason(git_run)
331
345
  if skip_reason is not None:
332
346
  if skip_reason:
333
- typer.secho(skip_reason, fg=typer.colors.YELLOW, err=True)
347
+ _warn_pull(skip_reason)
334
348
  return
335
349
  before = _read_head(git_run)
336
350
  result = git_run(
@@ -341,7 +355,7 @@ def _fast_forward_workspace(git_run: Callable[..., Any]) -> None:
341
355
  timeout=_GIT_PULL_TIMEOUT_SECONDS,
342
356
  )
343
357
  if result.returncode != 0:
344
- typer.secho(_PULL_SKIPPED_WARNING, fg=typer.colors.YELLOW, err=True)
358
+ _warn_pull(_PULL_SKIPPED_WARNING)
345
359
  return
346
360
  _report_fast_forward(git_run, before, _read_head(git_run))
347
361
 
@@ -414,10 +428,13 @@ def _report_fast_forward(git_run: Callable[..., Any], before: str, after: str) -
414
428
  return
415
429
  noun = "commit" if commits == 1 else "commits"
416
430
  typer.secho(
417
- f"Workspace fast-forwarded ({commits} {noun})",
431
+ f"✓ Workspace fast-forwarded ({commits} {noun})",
418
432
  fg=typer.colors.GREEN,
419
433
  err=True,
420
434
  )
435
+ # A trailing blank line separates the fast-forward block from the
436
+ # ``Checking configurations...`` line that follows it.
437
+ typer.echo("", err=True)
421
438
 
422
439
 
423
440
  def _start_background_update_check(container: Container) -> list[str]:
@@ -440,22 +457,27 @@ def _start_background_update_check(container: Container) -> list[str]:
440
457
  return _display_update_notification(container, cache_path)
441
458
 
442
459
 
443
- def _run_startup_preamble(
460
+ def _run_startup_preamble( # noqa: PLR0913 # Each parameter is an explicit startup gate.
444
461
  container: Container,
445
462
  fired: list[str],
446
463
  agent: Optional[str] = None,
447
464
  setup_editor: Optional[bool] = None,
448
465
  setup_api_key: Optional[bool] = None,
466
+ pull_workspace: bool = False,
449
467
  ) -> None:
450
468
  """Run the shared startup preamble for both session entry points.
451
469
 
452
470
  The order is fixed so the banner layout cannot drift: health checks, the
453
- ``Checking configurations...`` line, the preflight check (whose returned
454
- keys extend ``fired``), then the shared disable-footer. ``start`` forwards
455
- its ``agent`` so the preflight validates the agent prompt; ``resume``
456
- leaves it ``None`` and validates no agent.
471
+ start-only workspace fast-forward line, the ``Checking configurations...``
472
+ line, the preflight check (whose returned keys extend ``fired``), then the
473
+ shared disable-footer. ``start`` forwards its ``agent`` so the preflight
474
+ validates the agent prompt and enables ``pull_workspace``; ``resume``
475
+ leaves the agent ``None`` and keeps the pull off.
457
476
  """
458
- _run_health_checks(container.resolve(IConfigService))
477
+ config_service = container.resolve(IConfigService)
478
+ _run_health_checks(config_service)
479
+ if pull_workspace:
480
+ _pull_workspace_on_start(config_service)
459
481
  typer.echo("Checking configurations...", err=True)
460
482
  fired.extend(
461
483
  _run_cli_preflight_check(
@@ -861,8 +883,8 @@ def handle_new_session( # noqa: PLR0913
861
883
  agent=agent,
862
884
  setup_editor=setup_editor,
863
885
  setup_api_key=setup_api_key,
886
+ pull_workspace=True,
864
887
  )
865
- _pull_workspace_on_start(container.resolve(IConfigService))
866
888
  _echo_config_success(container, agent, model=model)
867
889
 
868
890
  session_manager: ISessionManager = container.resolve(ISessionManager)
@@ -126,7 +126,7 @@ Prefer config-level bypasses (pyproject `per-file-ignores`, pre-commit `exclude`
126
126
 
127
127
  ### Code and Naming Hygiene
128
128
 
129
- Write semantic, self-documenting code where naming and structure make what the code does immediately obvious. Reserve comments exclusively for why (business rationale, non-obvious invariants, constraints, or algorithmic trade-offs); never repeat what code already states. Write comments as full, natural sentences without artificial line-breaking or column wrapping. When editing existing code, update or improve confusing comments rather than leaving stale text. Never cite internal documentation filenames, section headers, rule numbers, or workflow steps in code comments, action descriptions, or turn titles. Name files, functions, and tests after the domain concept, scenario, or behavior under test. Never embed incident, ticket, or bug numbers in file, function, class, or test names.
129
+ Write semantic, self-documenting code where naming and structure make what the code does immediately obvious. Reserve comments exclusively for why (business rationale, non-obvious invariants, constraints, or algorithmic trade-offs); never repeat what code already states. Write comments as full, natural sentences without artificial line-breaking or column wrapping. When editing existing code, update or improve confusing comments rather than leaving stale text. Never cite internal documentation filenames, section headers, rule numbers, or workflow steps in code comments, action descriptions, or turn titles. Name files, functions, and tests after the domain concept, scenario, or behavior under test. Consistently apply domain terms and Ubiquitous Language across all code, tests, and documentation. Never embed incident, ticket, or bug numbers in file, function, class, or test names.
130
130
 
131
131
  ## Response Format
132
132