teddy-cli 0.1.17.dev1323__tar.gz → 0.1.17.dev1325__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (162) hide show
  1. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/PKG-INFO +1 -1
  2. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/pyproject.toml +1 -1
  3. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/resources/templates/makefile.md +24 -13
  4. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/.gitignore +0 -0
  5. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/LICENSE +0 -0
  6. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/README.md +0 -0
  7. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/__init__.py +0 -0
  8. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/__main__.py +0 -0
  9. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/adapters/__init__.py +0 -0
  10. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/adapters/inbound/__init__.py +0 -0
  11. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/adapters/inbound/cli_formatter.py +0 -0
  12. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/adapters/inbound/cli_helpers.py +0 -0
  13. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/adapters/inbound/session_cli_handlers.py +0 -0
  14. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/adapters/inbound/textual_plan_reviewer.py +0 -0
  15. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_app.py +0 -0
  16. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_editor.py +0 -0
  17. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_execution.py +0 -0
  18. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_helpers.py +0 -0
  19. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_logic.py +0 -0
  20. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_previews.py +0 -0
  21. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_widgets.py +0 -0
  22. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/adapters/outbound/__init__.py +0 -0
  23. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/adapters/outbound/console_interactor.py +0 -0
  24. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/adapters/outbound/console_interactor_ask_loop.py +0 -0
  25. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/adapters/outbound/console_interactor_helpers.py +0 -0
  26. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/adapters/outbound/console_tooling.py +0 -0
  27. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/adapters/outbound/filesystem_helpers.py +0 -0
  28. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/adapters/outbound/litellm_adapter.py +0 -0
  29. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/adapters/outbound/local_file_system_adapter.py +0 -0
  30. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/adapters/outbound/local_repo_tree_generator.py +0 -0
  31. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/adapters/outbound/openrouter_hydrator.py +0 -0
  32. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/adapters/outbound/shell_adapter.py +0 -0
  33. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/adapters/outbound/shell_command_builder.py +0 -0
  34. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/adapters/outbound/suppressed_logging.py +0 -0
  35. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/adapters/outbound/system_environment_adapter.py +0 -0
  36. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/adapters/outbound/system_environment_inspector.py +0 -0
  37. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/adapters/outbound/system_time_adapter.py +0 -0
  38. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/adapters/outbound/terminal_quit_key_listener.py +0 -0
  39. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/adapters/outbound/web_scraper_adapter.py +0 -0
  40. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/adapters/outbound/web_searcher_adapter.py +0 -0
  41. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/adapters/outbound/yaml_config_adapter.py +0 -0
  42. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/container.py +0 -0
  43. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/__init__.py +0 -0
  44. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/domain/__init__.py +0 -0
  45. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/domain/models/__init__.py +0 -0
  46. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/domain/models/action_ports.py +0 -0
  47. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/domain/models/change_set.py +0 -0
  48. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/domain/models/drift_report.py +0 -0
  49. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/domain/models/exceptions.py +0 -0
  50. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/domain/models/execution_report.py +0 -0
  51. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/domain/models/orchestrator_ports.py +0 -0
  52. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/domain/models/plan.py +0 -0
  53. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/domain/models/planning_ports.py +0 -0
  54. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/domain/models/project_context.py +0 -0
  55. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/domain/models/report_assembly_data.py +0 -0
  56. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/domain/models/session.py +0 -0
  57. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/domain/models/shell_output.py +0 -0
  58. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/domain/models/web_search_results.py +0 -0
  59. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/ports/__init__.py +0 -0
  60. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/ports/inbound/__init__.py +0 -0
  61. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/ports/inbound/edit_simulator.py +0 -0
  62. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/ports/inbound/get_context_use_case.py +0 -0
  63. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/ports/inbound/init.py +0 -0
  64. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/ports/inbound/plan_parser.py +0 -0
  65. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/ports/inbound/plan_reviewer.py +0 -0
  66. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/ports/inbound/plan_validator.py +0 -0
  67. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/ports/inbound/planning_use_case.py +0 -0
  68. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/ports/inbound/run_plan_use_case.py +0 -0
  69. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/ports/outbound/__init__.py +0 -0
  70. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/ports/outbound/config_service.py +0 -0
  71. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/ports/outbound/environment_inspector.py +0 -0
  72. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/ports/outbound/execution_report_assembler.py +0 -0
  73. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/ports/outbound/file_system_manager.py +0 -0
  74. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/ports/outbound/llm_client.py +0 -0
  75. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/ports/outbound/markdown_report_formatter.py +0 -0
  76. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/ports/outbound/prompt_manager.py +0 -0
  77. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/ports/outbound/quit_key_listener.py +0 -0
  78. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/ports/outbound/repo_tree_generator.py +0 -0
  79. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/ports/outbound/session_loop_guard.py +0 -0
  80. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/ports/outbound/session_manager.py +0 -0
  81. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/ports/outbound/session_repository.py +0 -0
  82. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/ports/outbound/shell_executor.py +0 -0
  83. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/ports/outbound/system_environment.py +0 -0
  84. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/ports/outbound/time_service.py +0 -0
  85. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/ports/outbound/user_interactor.py +0 -0
  86. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/ports/outbound/web_scraper.py +0 -0
  87. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/ports/outbound/web_searcher.py +0 -0
  88. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/services/__init__.py +0 -0
  89. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/services/action_changeset_builder.py +0 -0
  90. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/services/action_diff_manager.py +0 -0
  91. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/services/action_dispatcher.py +0 -0
  92. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/services/action_executor.py +0 -0
  93. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/services/action_factory.py +0 -0
  94. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/services/action_parser_complex.py +0 -0
  95. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/services/action_parser_strategies.py +0 -0
  96. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/services/context_service.py +0 -0
  97. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/services/edit_simulator.py +0 -0
  98. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/services/execution_orchestrator.py +0 -0
  99. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/services/execution_report_assembler.py +0 -0
  100. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/services/init_service.py +0 -0
  101. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/services/markdown_plan_parser.py +0 -0
  102. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/services/markdown_report_formatter.py +0 -0
  103. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/services/parser_infrastructure.py +0 -0
  104. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/services/parser_metadata.py +0 -0
  105. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/services/parser_reporting.py +0 -0
  106. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/services/plan_validator.py +0 -0
  107. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/services/planning_service.py +0 -0
  108. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/services/prompt_manager.py +0 -0
  109. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/services/session_lifecycle_manager.py +0 -0
  110. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/services/session_loop_guard.py +0 -0
  111. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/services/session_orchestrator.py +0 -0
  112. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/services/session_planner.py +0 -0
  113. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/services/session_pruning_service.py +0 -0
  114. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/services/session_replanner.py +0 -0
  115. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/services/session_repository.py +0 -0
  116. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/services/session_service.py +0 -0
  117. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/services/templates/execution_report.md.j2 +0 -0
  118. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/services/update_checker.py +0 -0
  119. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/services/validation_rules/__init__.py +0 -0
  120. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/services/validation_rules/edit.py +0 -0
  121. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/services/validation_rules/edit_matcher.py +0 -0
  122. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/services/validation_rules/edit_matcher_heuristics.py +0 -0
  123. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/services/validation_rules/execute.py +0 -0
  124. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/services/validation_rules/filesystem.py +0 -0
  125. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/services/validation_rules/helpers.py +0 -0
  126. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/services/validation_rules/message.py +0 -0
  127. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/utils/__init__.py +0 -0
  128. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/utils/diff.py +0 -0
  129. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/utils/interrupt_guard.py +0 -0
  130. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/utils/io.py +0 -0
  131. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/utils/markdown.py +0 -0
  132. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/utils/paths.py +0 -0
  133. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/utils/serialization.py +0 -0
  134. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/utils/session_notices.py +0 -0
  135. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/utils/stdin_ownership.py +0 -0
  136. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/utils/string.py +0 -0
  137. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/core/utils/terminal.py +0 -0
  138. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/prompts.py +0 -0
  139. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/registries/__init__.py +0 -0
  140. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/registries/infrastructure.py +0 -0
  141. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/registries/reviewer.py +0 -0
  142. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/registries/validators.py +0 -0
  143. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/resources/MRP.md +0 -0
  144. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/resources/__init__.py +0 -0
  145. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/resources/config/__init__.py +0 -0
  146. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/resources/config/config.yaml +0 -0
  147. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/resources/config/init.context +0 -0
  148. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/resources/config/prompts/architect.md +0 -0
  149. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/resources/config/prompts/assistant.md +0 -0
  150. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/resources/config/prompts/debugger.md +0 -0
  151. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/resources/config/prompts/developer.md +0 -0
  152. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/resources/config/prompts/pathfinder.md +0 -0
  153. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/resources/config/prompts/prototyper.md +0 -0
  154. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/resources/templates/ARCHITECTURE.md +0 -0
  155. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/resources/templates/PROJECT.md +0 -0
  156. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/resources/templates/case-file.md +0 -0
  157. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/resources/templates/ci.md +0 -0
  158. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/resources/templates/component-design.md +0 -0
  159. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/resources/templates/milestone.md +0 -0
  160. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/resources/templates/pre-commit.md +0 -0
  161. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/src/teddy_executor/resources/templates/specification-document.md +0 -0
  162. {teddy_cli-0.1.17.dev1323 → teddy_cli-0.1.17.dev1325}/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.dev1323
3
+ Version: 0.1.17.dev1325
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.dev1323"
3
+ version = "0.1.17.dev1325"
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 = [
@@ -153,12 +153,13 @@ push:
153
153
 
154
154
  ## CI Watch & Attribution
155
155
 
156
- `make ci-watch` discovers **every** CI run for the target commit (`HEAD` by default, or `COMMIT=<sha>`), waits for and reports each workflow with its jobs. It answers ONE question: **did this commit turn a BLOCKING gate red?** Only include and configure this target if a remote CI pipeline is configured or planned for the project.
156
+ `make ci-watch` discovers **every** CI run for the target commit (`HEAD` by default, or `COMMIT=<sha>`), waits for and reports each workflow with its jobs. It answers ONE question: **did this commit turn a BLOCKING gate red?** Only push-triggered workflows are attributed; a downstream workflow that registers from a `workflow_run` event is not a regression in this commit. Only include and configure this target if a remote CI pipeline is configured or planned for the project.
157
157
 
158
158
  The pushed RUN's own conclusion is authoritative: it already folds in `continue-on-error`, so a **non-blocking** job (e.g. the CI `Quality Checks` job) can NEVER block the session — it is reported as a triage item instead. Only when the run-level conclusion is `failure` does attribution run, comparing the pushed run's failing-JOB set against the base run's:
159
159
 
160
- - **base green/absent/job-less → new red** = your regression → **exit 1** (fix before concluding).
161
- - **base red → new red (same jobs)** = pre-existing → **report and exit 0** (do not wait, do not duplicate the fix).
160
+ - **base green/absent/job-less → new red** = your regression → **exit non-zero** (fix before concluding).
161
+ - **base red → new red (subset of the base's failing jobs)** = pre-existing → **report and exit 0** (do not wait, do not duplicate the fix).
162
+ - **unknown conclusion** (`timed_out`/`cancelled`/`startup_failure`) = the gate result is unknown → **fail-safe block** → **exit non-zero**.
162
163
  - **all green / non-blocking** → PASSED → **exit 0**.
163
164
  - **job-less base** → NOT green: a base run that exists but carries zero jobs (an invalid-workflow failure) is treated as an unknown base and fails safe (block).
164
165
 
@@ -168,7 +169,7 @@ Attribution is deterministic: SHA → run → run-level + per-job conclusion (ne
168
169
 
169
170
  Key behaviors:
170
171
 
171
- 1. **Automatic SHA and BASE resolution.** `SHA` defaults to current `HEAD` (or `COMMIT=<sha>`), and `BASE` defaults to `HEAD~1`.
172
+ 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).
172
173
  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.
173
174
  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.
174
175
 
@@ -178,10 +179,10 @@ Key behaviors:
178
179
  RETRY_POLLS ?= 10
179
180
  RETRY_SLEEP ?= 2
180
181
  DETAIL_LINES ?= 50
182
+ BASE_DEPTH ?= 50
181
183
 
182
184
  ci-watch:
183
185
  @SHA=$$(git rev-parse $${COMMIT:-HEAD}); \
184
- BASE=$$(git rev-parse $${COMMIT:-HEAD}~1 2>/dev/null || echo ""); \
185
186
  if [ -z "$$(ls .github/workflows/*.yml .github/workflows/*.yaml 2>/dev/null)" ]; then \
186
187
  echo "No CI configured - skipping attribution"; \
187
188
  exit 0; \
@@ -193,7 +194,7 @@ ci-watch:
193
194
  ATTEMPTS=$$((ATTEMPTS + 1)); \
194
195
  sleep $(RETRY_SLEEP); \
195
196
  done; \
196
- echo "Watching CI for $$SHA (base $${BASE:-none}) after $$ATTEMPTS poll(s)"; \
197
+ echo "Watching CI for $$SHA after $$ATTEMPTS poll(s)"; \
197
198
  if [ -z "$$WFS" ]; then \
198
199
  echo "CI: no run registered for $$SHA after $$(( $(RETRY_POLLS) * $(RETRY_SLEEP) ))s - fail-safe block"; \
199
200
  exit 1; \
@@ -210,7 +211,7 @@ ci-watch:
210
211
  echo " view all failed logs: make logs $$NEW"; \
211
212
  echo " view specific step: make logs $$NEW '<step-name>'"; \
212
213
  fi; \
213
- if [ "$$NEWCONC" != "failure" ]; then \
214
+ if [ "$$NEWCONC" = "success" ]; then \
214
215
  if [ -n "$$NEWFAIL" ]; then \
215
216
  echo "$$WF: PASSED (run=$$NEWCONC) — non-blocking failure(s) [$$NEWFAIL] — triage, does not block"; \
216
217
  else \
@@ -218,22 +219,32 @@ ci-watch:
218
219
  fi; \
219
220
  continue; \
220
221
  fi; \
221
- if [ -z "$$BASE" ]; then \
222
- echo "$$WF: BLOCKING failure ($$NEWFAIL) — no base commit — YOUR regression"; \
222
+ if [ "$$NEWCONC" != "failure" ]; then \
223
+ echo "$$WF: BLOCKING (run=$$NEWCONC) — unknown conclusion — fail-safe block"; \
223
224
  STATUS=1; continue; \
224
225
  fi; \
225
- OLD=$$(gh run list --commit "$$BASE" --workflow "$$WF" --json databaseId --jq '.[0].databaseId'); \
226
- if [ -z "$$OLD" ]; then \
227
- echo "$$WF: BLOCKING failure ($$NEWFAIL) — base has no run (unknown base) — YOUR regression"; \
226
+ BASE=""; CUR="$$SHA"; DEPTH=0; \
227
+ while [ $$DEPTH -lt $(BASE_DEPTH) ]; do \
228
+ CUR=$$(git rev-parse "$$CUR~1" 2>/dev/null) || break; \
229
+ [ -n "$$CUR" ] || break; \
230
+ if [ -n "$$(gh run list --commit "$$CUR" --workflow "$$WF" --json databaseId --jq '.[0].databaseId')" ]; then \
231
+ BASE="$$CUR"; break; \
232
+ fi; \
233
+ DEPTH=$$((DEPTH + 1)); \
234
+ done; \
235
+ if [ -z "$$BASE" ]; then \
236
+ echo "$$WF: BLOCKING failure ($$NEWFAIL) — no run-bearing ancestor (unknown base) — YOUR regression"; \
228
237
  STATUS=1; continue; \
229
238
  fi; \
239
+ OLD=$$(gh run list --commit "$$BASE" --workflow "$$WF" --json databaseId --jq '.[0].databaseId'); \
230
240
  OLDJOBS=$$(gh run view "$$OLD" --json jobs --jq '.jobs | length'); \
231
241
  if [ "$$OLDJOBS" = "0" ]; then \
232
242
  echo "$$WF: BLOCKING failure ($$NEWFAIL) — base run is job-less (invalid workflow, not green) — YOUR regression"; \
233
243
  STATUS=1; continue; \
234
244
  fi; \
235
245
  OLDFAIL=$$(gh run view "$$OLD" --json jobs --jq '[.jobs[] | select(.conclusion=="failure") | .name] | sort | join(",")'); \
236
- if [ "$$NEWFAIL" = "$$OLDFAIL" ]; then \
246
+ 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); \
247
+ if [ "$$SUBSET" = "pre-existing" ]; then \
237
248
  echo "$$WF: pre-existing BLOCKING failure ($$NEWFAIL) — not yours"; \
238
249
  else \
239
250
  echo "$$WF: BLOCKING failure ($$NEWFAIL) — YOUR regression"; \