teddy-cli 0.1.17.dev1416__tar.gz → 0.1.17.dev1419__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.dev1416 → teddy_cli-0.1.17.dev1419}/PKG-INFO +1 -1
  2. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/pyproject.toml +1 -1
  3. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/adapters/inbound/session_cli_handlers.py +29 -28
  4. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/resources/MRP.md +2 -2
  5. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/resources/config/prompts/debugger.md +1 -1
  6. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/resources/templates/makefile.md +28 -10
  7. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/.gitignore +0 -0
  8. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/LICENSE +0 -0
  9. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/README.md +0 -0
  10. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/__init__.py +0 -0
  11. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/__main__.py +0 -0
  12. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/adapters/__init__.py +0 -0
  13. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/adapters/inbound/__init__.py +0 -0
  14. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/adapters/inbound/cli_formatter.py +0 -0
  15. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/adapters/inbound/cli_helpers.py +0 -0
  16. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/adapters/inbound/textual_plan_reviewer.py +0 -0
  17. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_app.py +0 -0
  18. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_editor.py +0 -0
  19. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_execution.py +0 -0
  20. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_helpers.py +0 -0
  21. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_logic.py +0 -0
  22. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_previews.py +0 -0
  23. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_widgets.py +0 -0
  24. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/adapters/outbound/__init__.py +0 -0
  25. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/adapters/outbound/console_interactor.py +0 -0
  26. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/adapters/outbound/console_interactor_ask_loop.py +0 -0
  27. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/adapters/outbound/console_interactor_helpers.py +0 -0
  28. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/adapters/outbound/console_tooling.py +0 -0
  29. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/adapters/outbound/filesystem_helpers.py +0 -0
  30. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/adapters/outbound/litellm_adapter.py +0 -0
  31. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/adapters/outbound/local_file_system_adapter.py +0 -0
  32. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/adapters/outbound/local_repo_tree_generator.py +0 -0
  33. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/adapters/outbound/openrouter_hydrator.py +0 -0
  34. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/adapters/outbound/shell_adapter.py +0 -0
  35. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/adapters/outbound/shell_command_builder.py +0 -0
  36. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/adapters/outbound/suppressed_logging.py +0 -0
  37. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/adapters/outbound/system_environment_adapter.py +0 -0
  38. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/adapters/outbound/system_environment_inspector.py +0 -0
  39. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/adapters/outbound/system_time_adapter.py +0 -0
  40. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/adapters/outbound/terminal_quit_key_listener.py +0 -0
  41. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/adapters/outbound/web_scraper_adapter.py +0 -0
  42. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/adapters/outbound/web_searcher_adapter.py +0 -0
  43. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/adapters/outbound/yaml_config_adapter.py +0 -0
  44. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/container.py +0 -0
  45. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/__init__.py +0 -0
  46. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/domain/__init__.py +0 -0
  47. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/domain/models/__init__.py +0 -0
  48. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/domain/models/action_ports.py +0 -0
  49. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/domain/models/change_set.py +0 -0
  50. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/domain/models/config_schema.py +0 -0
  51. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/domain/models/drift_report.py +0 -0
  52. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/domain/models/exceptions.py +0 -0
  53. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/domain/models/execution_report.py +0 -0
  54. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/domain/models/orchestrator_ports.py +0 -0
  55. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/domain/models/plan.py +0 -0
  56. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/domain/models/planning_ports.py +0 -0
  57. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/domain/models/project_context.py +0 -0
  58. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/domain/models/report_assembly_data.py +0 -0
  59. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/domain/models/session.py +0 -0
  60. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/domain/models/shell_output.py +0 -0
  61. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/domain/models/web_search_results.py +0 -0
  62. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/ports/__init__.py +0 -0
  63. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/ports/inbound/__init__.py +0 -0
  64. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/ports/inbound/edit_simulator.py +0 -0
  65. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/ports/inbound/get_context_use_case.py +0 -0
  66. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/ports/inbound/init.py +0 -0
  67. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/ports/inbound/plan_parser.py +0 -0
  68. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/ports/inbound/plan_reviewer.py +0 -0
  69. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/ports/inbound/plan_validator.py +0 -0
  70. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/ports/inbound/planning_use_case.py +0 -0
  71. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/ports/inbound/run_plan_use_case.py +0 -0
  72. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/ports/outbound/__init__.py +0 -0
  73. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/ports/outbound/config_service.py +0 -0
  74. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/ports/outbound/environment_inspector.py +0 -0
  75. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/ports/outbound/execution_report_assembler.py +0 -0
  76. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/ports/outbound/file_system_manager.py +0 -0
  77. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/ports/outbound/llm_client.py +0 -0
  78. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/ports/outbound/markdown_report_formatter.py +0 -0
  79. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/ports/outbound/prompt_manager.py +0 -0
  80. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/ports/outbound/quit_key_listener.py +0 -0
  81. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/ports/outbound/repo_tree_generator.py +0 -0
  82. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/ports/outbound/session_loop_guard.py +0 -0
  83. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/ports/outbound/session_manager.py +0 -0
  84. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/ports/outbound/session_repository.py +0 -0
  85. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/ports/outbound/shell_executor.py +0 -0
  86. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/ports/outbound/system_environment.py +0 -0
  87. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/ports/outbound/time_service.py +0 -0
  88. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/ports/outbound/user_interactor.py +0 -0
  89. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/ports/outbound/web_scraper.py +0 -0
  90. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/ports/outbound/web_searcher.py +0 -0
  91. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/services/__init__.py +0 -0
  92. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/services/action_changeset_builder.py +0 -0
  93. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/services/action_diff_manager.py +0 -0
  94. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/services/action_dispatcher.py +0 -0
  95. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/services/action_executor.py +0 -0
  96. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/services/action_factory.py +0 -0
  97. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/services/action_parser_complex.py +0 -0
  98. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/services/action_parser_strategies.py +0 -0
  99. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/services/context_service.py +0 -0
  100. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/services/edit_simulator.py +0 -0
  101. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/services/execution_orchestrator.py +0 -0
  102. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/services/execution_report_assembler.py +0 -0
  103. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/services/init_service.py +0 -0
  104. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/services/markdown_plan_parser.py +0 -0
  105. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/services/markdown_report_formatter.py +0 -0
  106. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/services/parser_infrastructure.py +0 -0
  107. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/services/parser_metadata.py +0 -0
  108. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/services/parser_reporting.py +0 -0
  109. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/services/plan_validator.py +0 -0
  110. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/services/planning_service.py +0 -0
  111. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/services/prompt_manager.py +0 -0
  112. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/services/session_lifecycle_manager.py +0 -0
  113. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/services/session_loop_guard.py +0 -0
  114. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/services/session_orchestrator.py +0 -0
  115. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/services/session_planner.py +0 -0
  116. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/services/session_pruning_service.py +0 -0
  117. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/services/session_replanner.py +0 -0
  118. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/services/session_repository.py +0 -0
  119. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/services/session_service.py +0 -0
  120. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/services/templates/execution_report.md.j2 +0 -0
  121. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/services/update_checker.py +0 -0
  122. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/services/validation_rules/__init__.py +0 -0
  123. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/services/validation_rules/edit.py +0 -0
  124. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/services/validation_rules/edit_matcher.py +0 -0
  125. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/services/validation_rules/edit_matcher_heuristics.py +0 -0
  126. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/services/validation_rules/execute.py +0 -0
  127. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/services/validation_rules/filesystem.py +0 -0
  128. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/services/validation_rules/helpers.py +0 -0
  129. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/services/validation_rules/message.py +0 -0
  130. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/utils/__init__.py +0 -0
  131. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/utils/diff.py +0 -0
  132. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/utils/editor_names.py +0 -0
  133. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/utils/interrupt_guard.py +0 -0
  134. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/utils/interruptible_call.py +0 -0
  135. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/utils/io.py +0 -0
  136. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/utils/markdown.py +0 -0
  137. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/utils/paths.py +0 -0
  138. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/utils/serialization.py +0 -0
  139. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/utils/session_notices.py +0 -0
  140. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/utils/stdin_ownership.py +0 -0
  141. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/utils/string.py +0 -0
  142. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/core/utils/terminal.py +0 -0
  143. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/prompts.py +0 -0
  144. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/registries/__init__.py +0 -0
  145. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/registries/infrastructure.py +0 -0
  146. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/registries/reviewer.py +0 -0
  147. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/registries/validators.py +0 -0
  148. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/resources/__init__.py +0 -0
  149. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/resources/config/__init__.py +0 -0
  150. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/resources/config/config.yaml +0 -0
  151. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/resources/config/init.context +0 -0
  152. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/resources/config/prompts/architect.md +0 -0
  153. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/resources/config/prompts/assistant.md +0 -0
  154. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/resources/config/prompts/developer.md +0 -0
  155. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/resources/config/prompts/pathfinder.md +0 -0
  156. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/resources/config/prompts/prototyper.md +0 -0
  157. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/resources/templates/ARCHITECTURE.md +0 -0
  158. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/resources/templates/PROJECT.md +0 -0
  159. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/resources/templates/case-file.md +0 -0
  160. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/resources/templates/ci.md +0 -0
  161. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/resources/templates/component-design.md +0 -0
  162. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/resources/templates/milestone.md +0 -0
  163. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/resources/templates/pre-commit.md +0 -0
  164. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/src/teddy_executor/resources/templates/specification-document.md +0 -0
  165. {teddy_cli-0.1.17.dev1416 → teddy_cli-0.1.17.dev1419}/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.dev1416
3
+ Version: 0.1.17.dev1419
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.dev1416"
3
+ version = "0.1.17.dev1419"
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 = [
@@ -286,6 +286,7 @@ _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
288
  _PULL_GIT_UNAVAILABLE_WARNING = "⚠ Workspace pull skipped; git is unavailable."
289
+ _PULL_UP_TO_DATE_NOTICE = "✓ Workspace up-to-date with remote"
289
290
  _IN_PROGRESS_GIT_MARKERS = (
290
291
  "rebase-merge",
291
292
  "rebase-apply",
@@ -295,13 +296,12 @@ _IN_PROGRESS_GIT_MARKERS = (
295
296
 
296
297
 
297
298
  def _warn_pull(message: str) -> None:
298
- """Print one yellow pull warning followed by a blank line.
299
+ """Print one yellow pull warning.
299
300
 
300
- The trailing blank line keeps every pull block, success or warning, the
301
- same height before the ``Checking configurations...`` line.
301
+ The shared preamble owns the separator blank line before
302
+ ``Checking configurations...``, so this line carries no trailing blank.
302
303
  """
303
304
  typer.secho(message, fg=typer.colors.YELLOW, err=True)
304
- typer.echo("", err=True)
305
305
 
306
306
 
307
307
  def _pull_workspace_on_start(
@@ -411,20 +411,22 @@ def _read_head(git_run: Callable[..., Any]) -> str:
411
411
 
412
412
 
413
413
  def _report_fast_forward(git_run: Callable[..., Any], before: str, after: str) -> None:
414
- """Report how many commits the fast-forward moved, or stay silent.
414
+ """Report the pull outcome so the user always sees a result.
415
415
 
416
- A pull that moves no commit has nothing to report, so it prints nothing.
416
+ A fast-forward names the number of moved commits. A pull that moves no
417
+ commit confirms the workspace is already up to date.
417
418
  """
418
- if after == before:
419
- return
420
- count_output = git_run(
421
- ["git", "rev-list", "--count", f"{before}..{after}"],
422
- capture_output=True,
423
- text=True,
424
- timeout=_GIT_PULL_TIMEOUT_SECONDS,
425
- ).stdout.strip()
426
- commits = int(count_output) if count_output else 0
419
+ commits = 0
420
+ if after != before:
421
+ count_output = git_run(
422
+ ["git", "rev-list", "--count", f"{before}..{after}"],
423
+ capture_output=True,
424
+ text=True,
425
+ timeout=_GIT_PULL_TIMEOUT_SECONDS,
426
+ ).stdout.strip()
427
+ commits = int(count_output) if count_output else 0
427
428
  if commits <= 0:
429
+ typer.secho(_PULL_UP_TO_DATE_NOTICE, fg=typer.colors.GREEN, err=True)
428
430
  return
429
431
  noun = "commit" if commits == 1 else "commits"
430
432
  typer.secho(
@@ -432,9 +434,6 @@ def _report_fast_forward(git_run: Callable[..., Any], before: str, after: str) -
432
434
  fg=typer.colors.GREEN,
433
435
  err=True,
434
436
  )
435
- # A trailing blank line separates the fast-forward block from the
436
- # ``Checking configurations...`` line that follows it.
437
- typer.echo("", err=True)
438
437
 
439
438
 
440
439
  def _start_background_update_check(container: Container) -> list[str]:
@@ -468,16 +467,19 @@ def _run_startup_preamble( # noqa: PLR0913 # Each parameter is an explicit sta
468
467
  """Run the shared startup preamble for both session entry points.
469
468
 
470
469
  The order is fixed so the banner layout cannot drift: health checks, the
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.
470
+ start-only workspace fast-forward line, one separator blank line, the
471
+ ``Checking configurations...`` line, the preflight check (whose returned
472
+ keys extend ``fired``), then the shared disable-footer. ``start`` forwards
473
+ its ``agent`` so the preflight validates the agent prompt and enables
474
+ ``pull_workspace``; ``resume`` leaves the agent ``None`` and keeps the pull
475
+ off.
476
476
  """
477
477
  config_service = container.resolve(IConfigService)
478
478
  _run_health_checks(config_service)
479
479
  if pull_workspace:
480
480
  _pull_workspace_on_start(config_service)
481
+ # One separator groups the checkmark block above with the notices below.
482
+ typer.echo("", err=True)
481
483
  typer.echo("Checking configurations...", err=True)
482
484
  fired.extend(
483
485
  _run_cli_preflight_check(
@@ -772,11 +774,10 @@ def _display_drift_notification(container: Container) -> list[str]:
772
774
  fired.append("checks.templates")
773
775
 
774
776
  if drift_lines:
775
- # A single leading blank separates this block from the
776
- # ``Checking configurations...`` line above it. The lines carry no
777
- # trailing newline, so the shared disable-footer (emitted next) abuts
778
- # the final drift line.
779
- typer.echo("\n" + "\n".join(drift_lines))
777
+ # The notices sit directly under ``Checking configurations...``. The
778
+ # lines carry no trailing newline, so the shared disable-footer
779
+ # (emitted next) abuts the final drift line.
780
+ typer.echo("\n".join(drift_lines))
780
781
 
781
782
  return fired
782
783
 
@@ -56,7 +56,7 @@ Every EXECUTE action runs in a fresh subshell rooted at the project root (CWD).
56
56
 
57
57
  ### Information Gathering Workflow
58
58
 
59
- If you are missing information critical to your immediate goal, gather it efficiently without getting sidetracked. You can chain multiple discovery actions in one turn. Discover locally via `EXECUTE` (`git grep`) and externally via `RESEARCH`. Never rely on search snippets; always `READ` target URLs. For opaque sources (JavaScript-rendered pages, PDFs, binary formats) where `READ` fails or yields unusable content, `CREATE` and `EXECUTE` a minimal extraction script to inspect the raw data or API. If static reading leaves behavioral ambiguity, validate assumptions via a minimal spike in `spikes/`. Check flags with `[tool] --help` before running complex CLI commands.
59
+ If you are missing information critical to your immediate goal, gather it efficiently without getting sidetracked. You can chain multiple discovery actions in one turn. Discover locally via `EXECUTE` (`git grep`) and externally via `RESEARCH`. Never rely on search snippets; always `READ` target URLs. For opaque sources (JavaScript-rendered pages, PDFs, binary formats) where `READ` fails or yields unusable content, `CREATE` and `EXECUTE` a minimal extraction script to inspect the raw data or API. If static reading leaves behavioral ambiguity, validate assumptions via a minimal spike in `spikes/`. Check flags with `[tool] --help` before running complex CLI commands. To read CI logs, use `make logs RUN=<run-id>` for all failed steps, or `make logs RUN=<run-id> STEP="<step-name>"` for one step.
60
60
 
61
61
  ### Version Control
62
62
 
@@ -67,7 +67,7 @@ The entire commit cycle (test, stage, commit) MUST occur in a dedicated Version
67
67
  3. Execution: Run `make commit MSG="<type>(<scope>): <description>"`. This stages all local changes (`git add .`) and runs Git's local hooks before committing.
68
68
  4. Post-conditions: All tests MUST pass: the post-commit hook reverts automatically on failure and cannot be bypassed.
69
69
  5. Push at Conclusion: In the Conclusion phase, if a remote is configured, run `make push`.
70
- 6. CI Monitoring: If remote CI is configured and a push occurred, run `make ci-watch` to monitor workflow runs and to inspect results: use `make logs RUN=<run-id>` (or `make logs RUN=<run-id> STEP="<step-name>"`) for full logs.
70
+ 6. CI Monitoring: If remote CI is configured and a push occurred, run `make ci-watch` to monitor workflow runs. If needed inspect details using `make logs`.
71
71
 
72
72
  ### Standardized Plan Types
73
73
 
@@ -14,7 +14,7 @@ Follow these phases and steps in order. Keep track of your progress in your Stat
14
14
  1. **Case File Check:**
15
15
  If a Case File was not provided in the initial context, CREATE one following the case file template and path conventions.
16
16
  2. **Context and History Gathering:**
17
- Use EXECUTE `git grep`, EXECUTE `git log`, READ, and RESEARCH to understand the codebase, recent changes, and identify the last known green CI run or commit. For historical CI failures, do not try to read the entire log: extract failed step logs by executing `make logs RUN=[ID]` (for all failed steps) or `make logs RUN=[ID] STEP="[STEP_NAME]"` (for a specific step).
17
+ Use EXECUTE `git grep`, EXECUTE `git log`, READ, and RESEARCH to understand the codebase, recent changes, and identify the last known green CI run or commit. For historical CI failures pull the failed step logs.
18
18
  3. **Diagnostic MRE and Platform Check:**
19
19
  Trigger the symptom: if an existing command, test, or CI failure exists, execute it to observe the failure live. If the bug is reported verbally or without an existing test, write a targeted probe script in `spikes/debug/{scope-slug}/` to trigger the symptom.
20
20
 
@@ -13,7 +13,7 @@ make commit MSG="feat(templates): add PROJECT.md template"
13
13
  ```
14
14
 
15
15
  **What is `.PHONY`?**
16
- `.PHONY` is a Makefile directive that declares `commit`, `push`, `ci-watch`, `probe`, `test`, `logs`, `help`, and the internal `_preflight` gate as phony targets — they do not correspond to actual files. Without `.PHONY`, if a file named `commit` or `probe` existed in the directory (e.g., a script called `commit`), Make would see it as up-to-date and skip the target entirely. By declaring them phony, Make always runs the recipe when you call `make commit`, `make push`, `make ci-watch`, `make probe`, or `make test`.
16
+ `.PHONY` declares `commit`, `push`, `ci-watch`, `probe`, `test`, `logs`, `help`, and the internal `_preflight` gate as targets that name no file. Without it, a file named `commit` in the project root makes Make treat that target as up to date and skip the recipe.
17
17
 
18
18
  ### Help
19
19
  ```shell
@@ -91,17 +91,40 @@ EOF
91
91
 
92
92
  Always use GNU Make native features for cross-platform compatibility instead of shell-specific constructs:
93
93
 
94
- - **Native argument validation:** Use `$(if $(strip $(VAR)),,$(error Usage: ...))` instead of POSIX `[ -n "$$VAR" ]`. GNU Make validates parameters before spawning any shell process.
94
+ - **Required input validation:** Reject a missing required input in a parse-time block, not in the recipe. Make runs the check while it reads the file, so it aborts before any prerequisite and before any shell process starts. See [Parse-Time Input Validation](#parse-time-input-validation).
95
95
  - **Named inputs instead of positional goals:** Pass values as `NAME="value"`, as in `make commit MSG="feat(scope): add thing"`. GNU Make treats a command-line assignment as a variable, so no word of the value can become a goal. Positional capture through `$(MAKECMDGOALS)` is forbidden, because a word that names a real target executes that target.
96
96
  - **Parse-time goal validation:** Compare `$(MAKECMDGOALS)` against a `_KNOWN_GOALS` list and abort with `$(error ...)` when a goal is unknown or when more than one goal is present. The check runs while Make reads the file, so no recipe line can run first.
97
- - **POSIX shell preflight:** Every POSIX recipe target (`ci-watch`, `probe`, `logs`) depends on the internal `_preflight` target, which verifies `git`, `gh`, `awk`, and `sed` before any network call. It aborts with one actionable message instead of a generic `make: *** Error 1`.
97
+ - **POSIX shell preflight:** Every POSIX recipe target (`ci-watch`, `probe`, `logs`) depends on the internal `_preflight` target, which verifies `git`, `gh`, `awk`, and `sed` before any network call. It aborts with one actionable message instead of a generic `make: *** Error 1`. A missing required input aborts at parse time, before the tool gate runs.
98
+ - **One shell process per command group:** Make spawns one process per recipe line that carries a shell metacharacter, and Windows process creation costs far more than on POSIX. Join a target's independent commands into one backslash-continued block separated by `;`, so the target pays one process instead of one per line.
98
99
  - **Shell routing for Bash-only commands:** Make spawns a recipe line directly when the line carries no shell metacharacter. That direct spawn bypasses `SHELL`. On Windows it fails for Git Bash-only programs such as `sleep` and for shell builtins such as `echo`. Keep these commands inside a shell block that carries `;`, `&&`, or a variable expansion.
99
- - **Windows shell selection:** Set `SHELL := bash.exe` when `OS` is `Windows_NT` so multi-line shell pipelines (`ci-watch`, `probe`, `logs`) execute through Git Bash. `_preflight` also confirms that the shell is Git Bash rather than the WSL `bash.exe` shim, and it names the `SHELL=` override when it is not.
100
+ - **Windows shell selection:** Set `SHELL := bash.exe` when `OS` is `Windows_NT`. The assignment covers every target, not only the pipelines, and `_preflight` confirms that the shell is Git Bash rather than the WSL `bash.exe` shim and names the `SHELL=` override when it is not.
100
101
  - **Portable quoting:** Pass values with double quotes, as in `--field reason="..."`, because Windows `cmd.exe` keeps single quotes literally.
101
102
  - **ASCII-only output:** Recipe output stays ASCII, because a Windows console turns a non-ASCII dash into mojibake in captured logs.
102
103
  - **Explicit advisory fallback:** The advisory pre-commit pass consumes its own exit code with `|| echo "<sentence>"`, so a failing run prints one plain sentence. Make's `-` prefix is forbidden here, because it prints a bare `Error 1 (ignored)` line that reads as an unexplained defect.
103
104
  - **Error transparency:** The first pre-commit pass is advisory, so its non-zero exit is ignored and auto-fixed files are re-staged. Git then runs the same hooks again during `git commit`, and that second run is the blocking local gate. A hook failure there aborts the commit. The post-commit test gate is the final safety net. `make push` runs `git pull --rebase` and `git push` without suppression, so a rebase conflict or push rejection surfaces as a non-zero exit.
104
105
 
106
+ ### Parse-Time Input Validation
107
+
108
+ A required input is rejected while Make reads the file, so the check runs before any prerequisite and before any shell process starts. A recipe-level check is forbidden, because it runs after the `_preflight` prerequisite.
109
+
110
+ ```makefile
111
+ ifneq ($(filter commit,$(MAKECMDGOALS)),)
112
+ ifeq ($(strip $(MSG)),)
113
+ $(error Usage: make commit MSG="<type>(<scope>): <description>")
114
+ endif
115
+ endif
116
+ ifneq ($(filter probe,$(MAKECMDGOALS)),)
117
+ ifeq ($(strip $(REASON)),)
118
+ $(error Usage: make probe REASON="<reason>")
119
+ endif
120
+ endif
121
+ ifneq ($(filter logs,$(MAKECMDGOALS)),)
122
+ ifeq ($(strip $(RUN)),)
123
+ $(error Usage: make logs RUN=<run-id> [STEP="<step-name>"])
124
+ endif
125
+ endif
126
+ ```
127
+
105
128
  ## Test Workflow
106
129
 
107
130
  ### Example
@@ -127,7 +150,6 @@ test:
127
150
 
128
151
  ```makefile
129
152
  commit:
130
- $(if $(strip $(MSG)),,$(error Usage: make commit MSG="<type>(<scope>): <description>"))
131
153
  git add .
132
154
  @uv run pre-commit run || echo "Advisory pre-commit reported issues. Auto-fixed files were re-staged and the commit continues."
133
155
  git add .
@@ -300,9 +322,6 @@ ci-watch: _preflight
300
322
 
301
323
  ```makefile
302
324
  probe: _preflight
303
-
304
- probe:
305
- $(if $(strip $(REASON)),,$(error Usage: make probe REASON="<reason>"))
306
325
  git add -f spikes/debug/probe.sh
307
326
  git commit -m "debug: probe" --no-verify --allow-empty
308
327
  git push
@@ -336,8 +355,7 @@ The Debugger's Reproduction phase needs to read CI logs without drowning in the
336
355
  ### Example
337
356
 
338
357
  ```makefile
339
- logs:
340
- $(if $(strip $(RUN)),,$(error Usage: make logs RUN=<run-id> [STEP="<step-name>"]))
358
+ logs: _preflight
341
359
  @if [ -z "$(STEP)" ]; then \
342
360
  gh run view "$(RUN)" --log-failed 2>/dev/null | awk -F'\t' '{ if(j!=$$1||s!=$$2){j=$$1;s=$$2;print "\n["j" > "s"]"} 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\]Run /){k=1;next} if(k && l ~ /^##\[endgroup\]/){k=0;next} if(k)next; if(l ~ /^##\[group\]/ || l ~ /^##\[endgroup\]/)next; gsub(/^##\[error\]/,"Error: ",l); print l }'; \
343
361
  else \