teddy-cli 0.1.17.dev1421__tar.gz → 0.1.17.dev1423__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.dev1421 → teddy_cli-0.1.17.dev1423}/PKG-INFO +1 -1
  2. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/pyproject.toml +1 -1
  3. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/adapters/inbound/session_cli_handlers.py +24 -28
  4. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/resources/templates/makefile.md +21 -16
  5. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/.gitignore +0 -0
  6. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/LICENSE +0 -0
  7. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/README.md +0 -0
  8. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/__init__.py +0 -0
  9. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/__main__.py +0 -0
  10. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/adapters/__init__.py +0 -0
  11. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/adapters/inbound/__init__.py +0 -0
  12. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/adapters/inbound/cli_formatter.py +0 -0
  13. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/adapters/inbound/cli_helpers.py +0 -0
  14. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/adapters/inbound/textual_plan_reviewer.py +0 -0
  15. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_app.py +0 -0
  16. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_editor.py +0 -0
  17. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_execution.py +0 -0
  18. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_helpers.py +0 -0
  19. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_logic.py +0 -0
  20. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_previews.py +0 -0
  21. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_widgets.py +0 -0
  22. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/adapters/outbound/__init__.py +0 -0
  23. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/adapters/outbound/console_interactor.py +0 -0
  24. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/adapters/outbound/console_interactor_ask_loop.py +0 -0
  25. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/adapters/outbound/console_interactor_helpers.py +0 -0
  26. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/adapters/outbound/console_tooling.py +0 -0
  27. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/adapters/outbound/filesystem_helpers.py +0 -0
  28. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/adapters/outbound/litellm_adapter.py +0 -0
  29. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/adapters/outbound/local_file_system_adapter.py +0 -0
  30. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/adapters/outbound/local_repo_tree_generator.py +0 -0
  31. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/adapters/outbound/openrouter_hydrator.py +0 -0
  32. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/adapters/outbound/shell_adapter.py +0 -0
  33. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/adapters/outbound/shell_command_builder.py +0 -0
  34. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/adapters/outbound/suppressed_logging.py +0 -0
  35. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/adapters/outbound/system_environment_adapter.py +0 -0
  36. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/adapters/outbound/system_environment_inspector.py +0 -0
  37. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/adapters/outbound/system_time_adapter.py +0 -0
  38. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/adapters/outbound/terminal_quit_key_listener.py +0 -0
  39. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/adapters/outbound/web_scraper_adapter.py +0 -0
  40. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/adapters/outbound/web_searcher_adapter.py +0 -0
  41. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/adapters/outbound/yaml_config_adapter.py +0 -0
  42. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/container.py +0 -0
  43. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/__init__.py +0 -0
  44. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/domain/__init__.py +0 -0
  45. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/domain/models/__init__.py +0 -0
  46. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/domain/models/action_ports.py +0 -0
  47. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/domain/models/change_set.py +0 -0
  48. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/domain/models/config_schema.py +0 -0
  49. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/domain/models/drift_report.py +0 -0
  50. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/domain/models/exceptions.py +0 -0
  51. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/domain/models/execution_report.py +0 -0
  52. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/domain/models/orchestrator_ports.py +0 -0
  53. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/domain/models/plan.py +0 -0
  54. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/domain/models/planning_ports.py +0 -0
  55. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/domain/models/project_context.py +0 -0
  56. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/domain/models/report_assembly_data.py +0 -0
  57. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/domain/models/session.py +0 -0
  58. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/domain/models/shell_output.py +0 -0
  59. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/domain/models/web_search_results.py +0 -0
  60. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/ports/__init__.py +0 -0
  61. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/ports/inbound/__init__.py +0 -0
  62. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/ports/inbound/edit_simulator.py +0 -0
  63. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/ports/inbound/get_context_use_case.py +0 -0
  64. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/ports/inbound/init.py +0 -0
  65. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/ports/inbound/plan_parser.py +0 -0
  66. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/ports/inbound/plan_reviewer.py +0 -0
  67. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/ports/inbound/plan_validator.py +0 -0
  68. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/ports/inbound/planning_use_case.py +0 -0
  69. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/ports/inbound/run_plan_use_case.py +0 -0
  70. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/ports/outbound/__init__.py +0 -0
  71. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/ports/outbound/config_service.py +0 -0
  72. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/ports/outbound/environment_inspector.py +0 -0
  73. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/ports/outbound/execution_report_assembler.py +0 -0
  74. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/ports/outbound/file_system_manager.py +0 -0
  75. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/ports/outbound/llm_client.py +0 -0
  76. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/ports/outbound/markdown_report_formatter.py +0 -0
  77. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/ports/outbound/prompt_manager.py +0 -0
  78. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/ports/outbound/quit_key_listener.py +0 -0
  79. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/ports/outbound/repo_tree_generator.py +0 -0
  80. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/ports/outbound/session_loop_guard.py +0 -0
  81. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/ports/outbound/session_manager.py +0 -0
  82. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/ports/outbound/session_repository.py +0 -0
  83. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/ports/outbound/shell_executor.py +0 -0
  84. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/ports/outbound/system_environment.py +0 -0
  85. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/ports/outbound/time_service.py +0 -0
  86. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/ports/outbound/user_interactor.py +0 -0
  87. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/ports/outbound/web_scraper.py +0 -0
  88. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/ports/outbound/web_searcher.py +0 -0
  89. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/services/__init__.py +0 -0
  90. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/services/action_changeset_builder.py +0 -0
  91. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/services/action_diff_manager.py +0 -0
  92. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/services/action_dispatcher.py +0 -0
  93. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/services/action_executor.py +0 -0
  94. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/services/action_factory.py +0 -0
  95. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/services/action_parser_complex.py +0 -0
  96. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/services/action_parser_strategies.py +0 -0
  97. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/services/context_service.py +0 -0
  98. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/services/edit_simulator.py +0 -0
  99. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/services/execution_orchestrator.py +0 -0
  100. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/services/execution_report_assembler.py +0 -0
  101. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/services/init_service.py +0 -0
  102. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/services/markdown_plan_parser.py +0 -0
  103. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/services/markdown_report_formatter.py +0 -0
  104. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/services/parser_infrastructure.py +0 -0
  105. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/services/parser_metadata.py +0 -0
  106. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/services/parser_reporting.py +0 -0
  107. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/services/plan_validator.py +0 -0
  108. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/services/planning_service.py +0 -0
  109. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/services/prompt_manager.py +0 -0
  110. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/services/session_lifecycle_manager.py +0 -0
  111. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/services/session_loop_guard.py +0 -0
  112. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/services/session_orchestrator.py +0 -0
  113. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/services/session_planner.py +0 -0
  114. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/services/session_pruning_service.py +0 -0
  115. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/services/session_replanner.py +0 -0
  116. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/services/session_repository.py +0 -0
  117. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/services/session_service.py +0 -0
  118. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/services/templates/execution_report.md.j2 +0 -0
  119. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/services/update_checker.py +0 -0
  120. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/services/validation_rules/__init__.py +0 -0
  121. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/services/validation_rules/edit.py +0 -0
  122. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/services/validation_rules/edit_matcher.py +0 -0
  123. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/services/validation_rules/edit_matcher_heuristics.py +0 -0
  124. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/services/validation_rules/execute.py +0 -0
  125. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/services/validation_rules/filesystem.py +0 -0
  126. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/services/validation_rules/helpers.py +0 -0
  127. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/services/validation_rules/message.py +0 -0
  128. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/utils/__init__.py +0 -0
  129. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/utils/diff.py +0 -0
  130. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/utils/editor_names.py +0 -0
  131. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/utils/interrupt_guard.py +0 -0
  132. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/utils/interruptible_call.py +0 -0
  133. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/utils/io.py +0 -0
  134. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/utils/markdown.py +0 -0
  135. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/utils/paths.py +0 -0
  136. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/utils/serialization.py +0 -0
  137. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/utils/session_notices.py +0 -0
  138. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/utils/stdin_ownership.py +0 -0
  139. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/utils/string.py +0 -0
  140. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/core/utils/terminal.py +0 -0
  141. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/prompts.py +0 -0
  142. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/registries/__init__.py +0 -0
  143. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/registries/infrastructure.py +0 -0
  144. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/registries/reviewer.py +0 -0
  145. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/registries/validators.py +0 -0
  146. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/resources/MRP.md +0 -0
  147. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/resources/__init__.py +0 -0
  148. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/resources/config/__init__.py +0 -0
  149. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/resources/config/config.yaml +0 -0
  150. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/resources/config/init.context +0 -0
  151. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/resources/config/prompts/architect.md +0 -0
  152. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/resources/config/prompts/assistant.md +0 -0
  153. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/resources/config/prompts/debugger.md +0 -0
  154. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/resources/config/prompts/developer.md +0 -0
  155. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/resources/config/prompts/pathfinder.md +0 -0
  156. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/resources/config/prompts/prototyper.md +0 -0
  157. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/resources/templates/ARCHITECTURE.md +0 -0
  158. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/resources/templates/PROJECT.md +0 -0
  159. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/resources/templates/case-file.md +0 -0
  160. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/resources/templates/ci.md +0 -0
  161. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/resources/templates/component-design.md +0 -0
  162. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/resources/templates/milestone.md +0 -0
  163. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/resources/templates/pre-commit.md +0 -0
  164. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/src/teddy_executor/resources/templates/specification-document.md +0 -0
  165. {teddy_cli-0.1.17.dev1421 → teddy_cli-0.1.17.dev1423}/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.dev1421
3
+ Version: 0.1.17.dev1423
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.dev1421"
3
+ version = "0.1.17.dev1423"
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 = [
@@ -283,13 +283,11 @@ def _run_health_checks(config_service: IConfigService) -> None:
283
283
 
284
284
 
285
285
  _GIT_PULL_TIMEOUT_SECONDS = 15
286
- _PULL_SKIPPED_WARNING = "⚠ Workspace pull skipped; continuing with the current branch."
287
- _PULL_TIMEOUT_WARNING = "⚠ Workspace pull timed out; continuing without it."
286
+ _PULL_SKIPPED_WARNING = "⚠ Workspace pull skipped."
287
+ _PULL_TIMEOUT_WARNING = "⚠ Workspace pull timed out."
288
288
  _PULL_GIT_UNAVAILABLE_WARNING = "⚠ Workspace pull skipped; git is unavailable."
289
289
  _PULL_UP_TO_DATE_NOTICE = "✓ Workspace up-to-date with remote"
290
- _PULL_IN_PROGRESS_NOTICE = "✓ Workspace pull skipped; Git operation in progress"
291
- _PULL_DETACHED_HEAD_NOTICE = "✓ Workspace pull skipped; detached HEAD"
292
- _PULL_NO_UPSTREAM_NOTICE = "✓ Workspace pull skipped; no upstream branch"
290
+ _PULL_SKIPPED_NOTICE = "✓ Workspace pull skipped"
293
291
  _IN_PROGRESS_GIT_MARKERS = (
294
292
  "rebase-merge",
295
293
  "rebase-apply",
@@ -325,11 +323,12 @@ def _pull_workspace_on_start(
325
323
  The pull runs only when ``workspace.pull`` is enabled and the workspace is
326
324
  a Git repository, so a disabled toggle or a non-repository directory stays
327
325
  silent. A detached HEAD, a missing upstream, or an in-progress operation
328
- reports one checkmark notice, because the user needs a pull outcome on
329
- every run. A dirty worktree, a failed pull, a timeout, or an unavailable
330
- git binary reports one warning and leaves the workspace unchanged. A
331
- successful fast-forward names the number of commits it moved, and a pull
332
- that moves no commit confirms the workspace is up to date.
326
+ reports one generic checkmark notice, because the user needs a pull outcome
327
+ on every run without the diagnostic detail. A dirty worktree, a failed
328
+ pull, a timeout, or an unavailable git binary reports one warning and
329
+ leaves the workspace unchanged. A successful fast-forward names the number
330
+ of commits it moved, and a pull that moves no commit confirms the workspace
331
+ is up to date.
333
332
 
334
333
  The Git process is injected through ``run_func`` so every decision is
335
334
  testable without spawning a real repository.
@@ -352,16 +351,15 @@ def _fast_forward_workspace(git_run: Callable[..., Any]) -> None:
352
351
 
353
352
  Each precondition is probed before the pull so an unsafe state never
354
353
  reaches ``git pull``. A dirty worktree reports one warning, while every
355
- other unsafe state reports one checkmark notice so the user always sees a
356
- pull outcome.
354
+ other unsafe state reports one generic checkmark notice so the user always
355
+ sees a pull outcome.
357
356
  """
358
357
  skip = _pull_skip_reason(git_run)
359
358
  if skip is not None:
360
- message, is_warning = skip
361
- if is_warning:
362
- _warn_pull(message)
359
+ if skip:
360
+ _warn_pull(_PULL_SKIPPED_WARNING)
363
361
  else:
364
- _notice_pull(message)
362
+ _notice_pull(_PULL_SKIPPED_NOTICE)
365
363
  return
366
364
  before = _read_head(git_run)
367
365
  result = git_run(
@@ -377,33 +375,31 @@ def _fast_forward_workspace(git_run: Callable[..., Any]) -> None:
377
375
  _report_fast_forward(git_run, before, _read_head(git_run))
378
376
 
379
377
 
380
- def _pull_skip_reason(
381
- git_run: Callable[..., Any],
382
- ) -> Optional[tuple[str, bool]]:
383
- """Return the outcome text and severity, or None when the pull may proceed.
378
+ def _pull_skip_reason(git_run: Callable[..., Any]) -> Optional[bool]:
379
+ """Return the skip severity, or None when the pull may proceed.
384
380
 
385
- Each unsafe state names its own reason, because the user needs a pull
386
- outcome on every run. The boolean marks a warning (``True``) versus a
387
- checkmark notice (``False``). A dirty worktree returns the skipped
388
- warning, because tracked changes can conflict.
381
+ Every skip prints one generic notice, so the caller only needs to know
382
+ whether an attention-worthy warning replaces it. The boolean marks a
383
+ warning (``True``) versus a checkmark notice (``False``). A dirty worktree
384
+ returns the warning, because tracked changes can conflict.
389
385
  """
390
386
  git_dir = Path.cwd() / ".git"
391
387
  if any((git_dir / marker).exists() for marker in _IN_PROGRESS_GIT_MARKERS):
392
- return _PULL_IN_PROGRESS_NOTICE, False
388
+ return False
393
389
  detached = git_run(
394
390
  ["git", "symbolic-ref", "-q", "HEAD"],
395
391
  capture_output=True,
396
392
  timeout=_GIT_PULL_TIMEOUT_SECONDS,
397
393
  )
398
394
  if detached.returncode != 0:
399
- return _PULL_DETACHED_HEAD_NOTICE, False
395
+ return False
400
396
  upstream = git_run(
401
397
  ["git", "rev-parse", "--abbrev-ref", "--symbolic-full-name", "@{u}"],
402
398
  capture_output=True,
403
399
  timeout=_GIT_PULL_TIMEOUT_SECONDS,
404
400
  )
405
401
  if upstream.returncode != 0:
406
- return _PULL_NO_UPSTREAM_NOTICE, False
402
+ return False
407
403
  status = git_run(
408
404
  ["git", "status", "--porcelain"],
409
405
  capture_output=True,
@@ -416,7 +412,7 @@ def _pull_skip_reason(
416
412
  if line and not line.startswith("??")
417
413
  ]
418
414
  if tracked_changes:
419
- return _PULL_SKIPPED_WARNING, True
415
+ return True
420
416
  return None
421
417
 
422
418
 
@@ -202,7 +202,7 @@ Attribution is deterministic: SHA → run → run-level + per-job conclusion (ne
202
202
 
203
203
  Key behaviors:
204
204
 
205
- 1. **Automatic SHA and BASE resolution.** `SHA` defaults to current `HEAD` (or `COMMIT=<sha>`), and `BASE` resolves per workflow to the most recent ancestor of `SHA` that carries a run for that workflow (bounded by `BASE_DEPTH`, default 50). An explicit `BASE=<sha>` pins the baseline verbatim and skips resolution; if the pinned commit carries no run for the workflow, the target fails safe as an unknown base.
205
+ 1. **Automatic SHA and BASE resolution.** `SHA` defaults to current `HEAD` (or `COMMIT=<sha>`), and `BASE` resolves per workflow to the most recent ancestor of `SHA` that carries a run for that workflow. The target fetches one bounded list of the workflow's latest runs (`BASE_SCAN`, default 200) and intersects it with the newest `BASE_DEPTH` ancestors (`git rev-list`, default 50), so resolution costs one API call instead of one per ancestor. An explicit `BASE=<sha>` pins the baseline verbatim and skips resolution; if the pinned commit carries no run for the workflow, the target fails safe as an unknown base.
206
206
  2. **Registration lag is tolerated by a bounded retry.** CI can fail to register a run for the pushed SHA immediately. The target polls `gh run list --commit <sha>` up to `RETRY_POLLS × RETRY_SLEEP` (default 10 × 2s ≈ 20s) before attributing. It fails safe if the run never registers.
207
207
  3. **No CI is non-blocking.** If the repository has no workflow files under `.github/workflows/` (`*.yml`/`*.yaml`), the target logs `No CI configured - skipping attribution` and exits 0.
208
208
  4. **Workflow names with spaces stay whole.** The target reads workflow names one line at a time. A name such as `Publish to PyPI` is attributed as one workflow.
@@ -214,6 +214,7 @@ RETRY_POLLS ?= 10
214
214
  RETRY_SLEEP ?= 2
215
215
  DETAIL_LINES ?= 50
216
216
  BASE_DEPTH ?= 50
217
+ BASE_SCAN ?= 200
217
218
  BASE ?=
218
219
 
219
220
  ci-watch: _preflight
@@ -250,9 +251,10 @@ ci-watch: _preflight
250
251
  while IFS= read -r WF; do \
251
252
  NEW=$$(gh run list --commit "$$SHA" --workflow "$$WF" --json databaseId --jq '.[0].databaseId'); \
252
253
  gh run watch "$$NEW" --exit-status >/dev/null 2>&1 || true; \
253
- NEWCONC=$$(gh run view "$$NEW" --json conclusion --jq '.conclusion'); \
254
- NEWFAIL=$$(gh run view "$$NEW" --json jobs --jq '[.jobs[] | select(.conclusion=="failure") | .name] | sort | join(",")'); \
255
- NEWSTEPS=$$(gh run view "$$NEW" --json jobs --jq '[.jobs[] | select(.conclusion=="failure") | .steps[]? | select(.conclusion=="failure") | .name] | sort | join(", ")'); \
254
+ NEWMETA=$$(gh run view "$$NEW" --json conclusion,jobs --jq '.conclusion, ([.jobs[] | select(.conclusion=="failure") | .name] | sort | join(",")), ([.jobs[] | select(.conclusion=="failure") | .steps[]? | select(.conclusion=="failure") | .name] | sort | join(", "))'); \
255
+ NEWCONC=$$(printf '%s\n' "$$NEWMETA" | sed -n '1p'); \
256
+ NEWFAIL=$$(printf '%s\n' "$$NEWMETA" | sed -n '2p'); \
257
+ NEWSTEPS=$$(printf '%s\n' "$$NEWMETA" | sed -n '3p'); \
256
258
  if [ -n "$$NEWSTEPS" ]; then \
257
259
  echo "$$WF: failing step(s): $$NEWSTEPS (run $$NEW)"; \
258
260
  gh run view "$$NEW" --log-failed 2>/dev/null | awk -F'\t' '{ l=$$3; p=index(l,"Z "); if(p>0)l=substr(l,p+2); gsub(/\x1B\[[0-9;]*[a-zA-Z]/,"",l); gsub(/\^\[\[[0-9;]*[a-zA-Z]/,"",l); if(l ~ /^##\[group\]/ || l ~ /^##\[endgroup\]/) next; gsub(/^##\[error\]/,"Error: ",l); print l }' | tail -n $(DETAIL_LINES) | sed 's/^/ /'; \
@@ -272,33 +274,36 @@ ci-watch: _preflight
272
274
  echo "$$WF: unknown conclusion '$$NEWCONC' on run $$NEW blocks the session." >&2; \
273
275
  STATUS=1; continue; \
274
276
  fi; \
275
- BASE="$(BASE)"; CUR="$$SHA"; DEPTH=0; \
276
- while [ -z "$$BASE" ] && [ $$DEPTH -lt $(BASE_DEPTH) ]; do \
277
- CUR=$$(git rev-parse "$$CUR~1" 2>/dev/null) || break; \
278
- [ -n "$$CUR" ] || break; \
279
- if [ -n "$$(gh run list --commit "$$CUR" --workflow "$$WF" --json databaseId --jq '.[0].databaseId')" ]; then \
280
- BASE="$$CUR"; break; \
281
- fi; \
282
- DEPTH=$$((DEPTH + 1)); \
283
- done; \
277
+ BASE="$(BASE)"; OLD=""; \
278
+ if [ -n "$$BASE" ]; then \
279
+ OLD=$$(gh run list --commit "$$BASE" --workflow "$$WF" --json databaseId --jq '.[0].databaseId'); \
280
+ else \
281
+ RUNLIST=$${TMPDIR:-/tmp}/ci-watch-runs.$$$$; \
282
+ gh run list --workflow "$$WF" -L $(BASE_SCAN) --json headSha,databaseId --jq '.[] | "\(.headSha) \(.databaseId)"' > "$$RUNLIST" 2>/dev/null; \
283
+ for CUR in $$(git rev-list -n $(BASE_DEPTH) "$$SHA^" 2>/dev/null); do \
284
+ OLD=$$(awk -v sha="$$CUR" '$$1 == sha { print $$2; exit }' "$$RUNLIST"); \
285
+ if [ -n "$$OLD" ]; then BASE="$$CUR"; break; fi; \
286
+ done; \
287
+ rm -f "$$RUNLIST"; \
288
+ fi; \
284
289
  if [ -z "$$BASE" ]; then \
285
290
  echo "$$WF: BLOCKING failure ($$NEWFAIL) - no run-bearing ancestor (unknown base) - YOUR regression"; \
286
291
  echo "$$WF: no run-bearing ancestor within $(BASE_DEPTH) commits, so the baseline is unknown." >&2; \
287
292
  STATUS=1; continue; \
288
293
  fi; \
289
- OLD=$$(gh run list --commit "$$BASE" --workflow "$$WF" --json databaseId --jq '.[0].databaseId'); \
290
294
  if [ -z "$$OLD" ]; then \
291
295
  echo "$$WF: BLOCKING failure ($$NEWFAIL) - pinned base has no run (unknown base) - YOUR regression"; \
292
296
  echo "$$WF: pinned base $$BASE carries no run for this workflow." >&2; \
293
297
  STATUS=1; continue; \
294
298
  fi; \
295
- OLDJOBS=$$(gh run view "$$OLD" --json jobs --jq '.jobs | length'); \
299
+ OLDMETA=$$(gh run view "$$OLD" --json jobs --jq '(.jobs | length), ([.jobs[] | select(.conclusion=="failure") | .name] | sort | join(","))'); \
300
+ OLDJOBS=$$(printf '%s\n' "$$OLDMETA" | sed -n '1p'); \
296
301
  if [ "$$OLDJOBS" = "0" ]; then \
297
302
  echo "$$WF: BLOCKING failure ($$NEWFAIL) - base run is job-less (invalid workflow, not green) - YOUR regression"; \
298
303
  echo "$$WF: base run $$OLD carries zero jobs, so it cannot prove a green baseline." >&2; \
299
304
  STATUS=1; continue; \
300
305
  fi; \
301
- OLDFAIL=$$(gh run view "$$OLD" --json jobs --jq '[.jobs[] | select(.conclusion=="failure") | .name] | sort | join(",")'); \
306
+ OLDFAIL=$$(printf '%s\n' "$$OLDMETA" | sed -n '2p'); \
302
307
  SUBSET=$$(awk -v new="$$NEWFAIL" -v old="$$OLDFAIL" 'BEGIN { n=split(new,na,","); m=split(old,oa,","); for (i=1;i<=n;i++) { if (na[i]=="") continue; f=0; for (j=1;j<=m;j++) { if (oa[j]==na[i]) { f=1; break } } if (!f) { print "regression"; exit } } print "pre-existing" }' </dev/null); \
303
308
  if [ "$$SUBSET" = "pre-existing" ]; then \
304
309
  echo "$$WF: pre-existing BLOCKING failure ($$NEWFAIL) - not yours"; \