teddy-cli 0.1.17.dev1276__tar.gz → 0.1.17.dev1278__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 (160) hide show
  1. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/PKG-INFO +1 -1
  2. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/pyproject.toml +1 -1
  3. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/resources/MRP.xml +1 -1
  4. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/resources/config/prompts/debugger.xml +1 -1
  5. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/resources/config/prompts/prototyper.xml +7 -7
  6. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/resources/templates/ci.md +25 -9
  7. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/resources/templates/makefile.md +19 -12
  8. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/.gitignore +0 -0
  9. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/LICENSE +0 -0
  10. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/__init__.py +0 -0
  11. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/__main__.py +0 -0
  12. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/adapters/__init__.py +0 -0
  13. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/adapters/inbound/__init__.py +0 -0
  14. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/adapters/inbound/cli_formatter.py +0 -0
  15. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/adapters/inbound/cli_helpers.py +0 -0
  16. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/adapters/inbound/session_cli_handlers.py +0 -0
  17. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/adapters/inbound/textual_plan_reviewer.py +0 -0
  18. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_app.py +0 -0
  19. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_editor.py +0 -0
  20. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_execution.py +0 -0
  21. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_helpers.py +0 -0
  22. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_logic.py +0 -0
  23. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_previews.py +0 -0
  24. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_widgets.py +0 -0
  25. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/adapters/outbound/__init__.py +0 -0
  26. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/adapters/outbound/console_interactor.py +0 -0
  27. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/adapters/outbound/console_interactor_ask_loop.py +0 -0
  28. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/adapters/outbound/console_interactor_helpers.py +0 -0
  29. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/adapters/outbound/console_tooling.py +0 -0
  30. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/adapters/outbound/filesystem_helpers.py +0 -0
  31. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/adapters/outbound/litellm_adapter.py +0 -0
  32. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/adapters/outbound/local_file_system_adapter.py +0 -0
  33. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/adapters/outbound/local_repo_tree_generator.py +0 -0
  34. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/adapters/outbound/openrouter_hydrator.py +0 -0
  35. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/adapters/outbound/shell_adapter.py +0 -0
  36. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/adapters/outbound/shell_command_builder.py +0 -0
  37. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/adapters/outbound/suppressed_logging.py +0 -0
  38. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/adapters/outbound/system_environment_adapter.py +0 -0
  39. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/adapters/outbound/system_environment_inspector.py +0 -0
  40. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/adapters/outbound/system_time_adapter.py +0 -0
  41. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/adapters/outbound/terminal_quit_key_listener.py +0 -0
  42. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/adapters/outbound/web_scraper_adapter.py +0 -0
  43. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/adapters/outbound/web_searcher_adapter.py +0 -0
  44. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/adapters/outbound/yaml_config_adapter.py +0 -0
  45. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/container.py +0 -0
  46. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/__init__.py +0 -0
  47. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/domain/__init__.py +0 -0
  48. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/domain/models/__init__.py +0 -0
  49. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/domain/models/action_ports.py +0 -0
  50. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/domain/models/change_set.py +0 -0
  51. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/domain/models/drift_report.py +0 -0
  52. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/domain/models/exceptions.py +0 -0
  53. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/domain/models/execution_report.py +0 -0
  54. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/domain/models/orchestrator_ports.py +0 -0
  55. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/domain/models/plan.py +0 -0
  56. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/domain/models/planning_ports.py +0 -0
  57. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/domain/models/project_context.py +0 -0
  58. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/domain/models/report_assembly_data.py +0 -0
  59. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/domain/models/session.py +0 -0
  60. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/domain/models/shell_output.py +0 -0
  61. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/domain/models/web_search_results.py +0 -0
  62. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/ports/__init__.py +0 -0
  63. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/ports/inbound/__init__.py +0 -0
  64. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/ports/inbound/edit_simulator.py +0 -0
  65. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/ports/inbound/get_context_use_case.py +0 -0
  66. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/ports/inbound/init.py +0 -0
  67. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/ports/inbound/plan_parser.py +0 -0
  68. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/ports/inbound/plan_reviewer.py +0 -0
  69. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/ports/inbound/plan_validator.py +0 -0
  70. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/ports/inbound/planning_use_case.py +0 -0
  71. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/ports/inbound/run_plan_use_case.py +0 -0
  72. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/ports/outbound/__init__.py +0 -0
  73. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/ports/outbound/config_service.py +0 -0
  74. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/ports/outbound/environment_inspector.py +0 -0
  75. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/ports/outbound/execution_report_assembler.py +0 -0
  76. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/ports/outbound/file_system_manager.py +0 -0
  77. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/ports/outbound/llm_client.py +0 -0
  78. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/ports/outbound/markdown_report_formatter.py +0 -0
  79. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/ports/outbound/prompt_manager.py +0 -0
  80. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/ports/outbound/quit_key_listener.py +0 -0
  81. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/ports/outbound/repo_tree_generator.py +0 -0
  82. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/ports/outbound/session_loop_guard.py +0 -0
  83. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/ports/outbound/session_manager.py +0 -0
  84. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/ports/outbound/session_repository.py +0 -0
  85. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/ports/outbound/shell_executor.py +0 -0
  86. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/ports/outbound/system_environment.py +0 -0
  87. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/ports/outbound/time_service.py +0 -0
  88. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/ports/outbound/user_interactor.py +0 -0
  89. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/ports/outbound/web_scraper.py +0 -0
  90. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/ports/outbound/web_searcher.py +0 -0
  91. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/services/__init__.py +0 -0
  92. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/services/action_changeset_builder.py +0 -0
  93. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/services/action_diff_manager.py +0 -0
  94. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/services/action_dispatcher.py +0 -0
  95. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/services/action_executor.py +0 -0
  96. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/services/action_factory.py +0 -0
  97. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/services/action_parser_complex.py +0 -0
  98. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/services/action_parser_strategies.py +0 -0
  99. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/services/context_service.py +0 -0
  100. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/services/edit_simulator.py +0 -0
  101. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/services/execution_orchestrator.py +0 -0
  102. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/services/execution_report_assembler.py +0 -0
  103. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/services/init_service.py +0 -0
  104. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/services/markdown_plan_parser.py +0 -0
  105. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/services/markdown_report_formatter.py +0 -0
  106. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/services/parser_infrastructure.py +0 -0
  107. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/services/parser_metadata.py +0 -0
  108. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/services/parser_reporting.py +0 -0
  109. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/services/plan_validator.py +0 -0
  110. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/services/planning_service.py +0 -0
  111. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/services/prompt_manager.py +0 -0
  112. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/services/session_lifecycle_manager.py +0 -0
  113. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/services/session_loop_guard.py +0 -0
  114. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/services/session_orchestrator.py +0 -0
  115. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/services/session_planner.py +0 -0
  116. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/services/session_pruning_service.py +0 -0
  117. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/services/session_replanner.py +0 -0
  118. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/services/session_repository.py +0 -0
  119. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/services/session_service.py +0 -0
  120. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/services/templates/execution_report.md.j2 +0 -0
  121. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/services/update_checker.py +0 -0
  122. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/services/validation_rules/__init__.py +0 -0
  123. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/services/validation_rules/edit.py +0 -0
  124. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/services/validation_rules/edit_matcher.py +0 -0
  125. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/services/validation_rules/edit_matcher_heuristics.py +0 -0
  126. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/services/validation_rules/execute.py +0 -0
  127. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/services/validation_rules/filesystem.py +0 -0
  128. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/services/validation_rules/helpers.py +0 -0
  129. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/services/validation_rules/message.py +0 -0
  130. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/utils/__init__.py +0 -0
  131. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/utils/diff.py +0 -0
  132. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/utils/interrupt_guard.py +0 -0
  133. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/utils/io.py +0 -0
  134. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/utils/markdown.py +0 -0
  135. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/utils/paths.py +0 -0
  136. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/utils/serialization.py +0 -0
  137. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/utils/stdin_ownership.py +0 -0
  138. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/utils/string.py +0 -0
  139. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/core/utils/terminal.py +0 -0
  140. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/prompts.py +0 -0
  141. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/registries/__init__.py +0 -0
  142. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/registries/infrastructure.py +0 -0
  143. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/registries/reviewer.py +0 -0
  144. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/registries/validators.py +0 -0
  145. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/resources/__init__.py +0 -0
  146. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/resources/config/__init__.py +0 -0
  147. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/resources/config/config.yaml +0 -0
  148. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/resources/config/init.context +0 -0
  149. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/resources/config/prompts/architect.xml +0 -0
  150. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/resources/config/prompts/assistant.xml +0 -0
  151. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/resources/config/prompts/developer.xml +0 -0
  152. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/resources/config/prompts/pathfinder.xml +0 -0
  153. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/resources/templates/ARCHITECTURE.md +0 -0
  154. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/resources/templates/PROJECT.md +0 -0
  155. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/resources/templates/case-file.md +0 -0
  156. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/resources/templates/component-design.md +0 -0
  157. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/resources/templates/milestone.md +0 -0
  158. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/resources/templates/pre-commit.md +0 -0
  159. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/src/teddy_executor/resources/templates/specification-document.md +0 -0
  160. {teddy_cli-0.1.17.dev1276 → teddy_cli-0.1.17.dev1278}/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.dev1276
3
+ Version: 0.1.17.dev1278
4
4
  Summary: A local-first, file-based AI coding workflow that applies the UNIX philosophy to AI collaboration.
5
5
  Author: Raphael Atteritano
6
6
  License: AGPL-3.0-only
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "teddy-cli"
3
- version = "0.1.17.dev1276"
3
+ version = "0.1.17.dev1278"
4
4
  description = "A local-first, file-based AI coding workflow that applies the UNIX philosophy to AI collaboration."
5
5
  authors = [{ name = "Raphael Atteritano" }]
6
6
  license = { text = "AGPL-3.0-only" }
@@ -51,7 +51,7 @@ NOTES:
51
51
  3. Execution: Run `make commit '<type>(<scope>): <description>'`. This stages all local changes (`git add .`) and runs Git's local hooks before committing.
52
52
  4. Post-conditions: All tests MUST pass: the post-commit hook reverts automatically on failure and cannot be bypassed.
53
53
  5. Push at Conclusion: In the Conclusion phase, run `make push` to rebase and push.
54
- 6. If needed: to verify remote CI run `make ci-watch` to monitor workflow runs and to inspect results: use `make logs <run-id> '<step-name>'` for full logs.
54
+ 6. If needed: to verify remote CI run `make ci-watch` to monitor workflow runs and to inspect results: use `make logs <run-id>` (or `make logs <run-id> '<step-name>'`) for full logs.
55
55
  </rule>
56
56
 
57
57
  <rule n="7" name="Standardized Plan Types">
@@ -9,7 +9,7 @@
9
9
  <phase n="1" name="Reproduction">
10
10
  <goal>Gather context and build or verify an end-to-end Minimal Reproducible Example (MRE).</goal>
11
11
  <step n="1" name="Case File Check">If a Case File was not provided in the initial context, READ `docs/templates/case-file.md` and CREATE one following that template.</step>
12
- <step n="2" name="Context and History Gathering">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. First use `gh run view [ID]` to inspect the execution tree and identify the exact name of the failed step. Then, extract only that step logs by executing `make logs [ID] '[FAILED_STEP_NAME]'`.</step>
12
+ <step n="2" name="Context and History Gathering">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 [ID]` (for all failed steps) or `make logs [ID] '[STEP_NAME]'` (for a specific step).</step>
13
13
  <step n="3" name="Diagnostic MRE and Platform Check">
14
14
  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.
15
15
 
@@ -18,18 +18,18 @@
18
18
  <step n="2" name="Iteration Loop">Iterate until internal workings are deeply understood and all Technical and Functional unknowns are resolved. If an unexpected failure occurs, isolate it using a focused sub-prototype. Update Key Unknowns with any emerging uncertainties.</step>
19
19
  </phase>
20
20
 
21
- <phase n="3" name="Documentation">
22
- <goal>Translate verified findings into buildable slices, component designs, and specifications.</goal>
23
- <step n="1" name="Artifact Updates">EDIT the Vertical Slice to reflect validated scenarios, edge cases, implementation deliverables, and verification steps. Place Wiring first as the tracer bullet deliverable, followed by contract, logic, refactoring, and harness deliverables. Mark resolved unknowns as completed, link the prototype directory in the slice metadata, and set status to Planned. EDIT linked Component Design Docs and specs in `docs/project/specs/` to reflect as-tested contracts, parameters, and invariants discovered during prototyping.</step>
24
- <step n="2" name="Impact and Debt Audit">Run EXECUTE `git grep` on target components. If a modified component has more than one consumer, treat it as a Shared Seam and structure deliverables as a non-breaking parallel change: expand, migrate, contract. Ensure all contract changes include matching harness deliverables.</step>
25
- </phase>
26
-
27
- <phase n="4" name="Alignment">
21
+ <phase n="3" name="Alignment">
28
22
  <goal>Present prototype findings and demo to the user for explicit validation and approval.</goal>
29
23
  <step n="1" name="Showcase Presentation">Message the user to present findings in clear prose. For Technical unknowns, provide raw assertion evidence or benchmarks. For Functional unknowns, provide copy-pasteable execution commands and list adjustable knobs. Present the updated slice deliverables and component specifications.</step>
30
24
  <step n="2" name="Approval Gate">Await explicit user approval before proceeding to the Conclusion phase. If the user requests changes, refine the prototypes and artifacts, re-run verification, and re-align.</step>
31
25
  </phase>
32
26
 
27
+ <phase n="4" name="Documentation">
28
+ <goal>Translate verified findings into buildable slices, component designs, and specifications.</goal>
29
+ <step n="1" name="Impact and Debt Audit">Run EXECUTE `git grep` on target components. If a modified component has more than one consumer, treat it as a Shared Seam and structure deliverables as a non-breaking parallel change: expand, migrate, contract. Ensure all contract changes include matching harness deliverables.</step>
30
+ <step n="2" name="Artifact Updates">EDIT the Vertical Slice to reflect validated scenarios, edge cases, implementation deliverables, and verification steps. Place Wiring first as the tracer bullet deliverable, followed by contract, logic, refactoring, and harness deliverables. Mark resolved unknowns as completed, link the prototype directory in the slice metadata, and set status to Planned. EDIT linked Component Design Docs and specs in `docs/project/specs/` to reflect as-tested contracts, parameters, and invariants discovered during prototyping.</step>
31
+ </phase>
32
+
33
33
  <phase n="5" name="Conclusion">
34
34
  <goal>Clean workspace, commit changes, push, and hand off to the Developer.</goal>
35
35
  <step n="1" name="Cleanup">Delete scratch files and unapproved probes, preserving only the approved prototype directory under `spikes/prototypes/{scope-slug}/`.</step>
@@ -15,8 +15,8 @@ The CI pipeline consists of two parallel jobs:
15
15
  - **Blocking:** If this job fails, the CI pipeline is marked as failed.
16
16
 
17
17
  ### Job 2: Non-Blocking Quality Checks
18
- - Runs the pre-commit hooks in two explicit passes: the fast hooks (formatters, `detect-secrets`, merge-conflict check) at the default `pre-commit` stage, then the heavy hooks (type checkers, security/dependency scanners, and the repository-wide structural checkers) at the non-default `manual` stage.
19
- - The heavy hooks are scoped to the `manual` stage so they never slow down the local pre-commit loop; CI invokes both stages explicitly.
18
+ - Runs granular quality checks in separate steps with `if: success() || failure()`, ensuring that all checks execute and report their outcomes even if an earlier check fails.
19
+ - Scopes heavy checks (type checkers, security/dependency scanners, structural checkers) to the non-default `manual` stage so they never slow down the local pre-commit loop.
20
20
  - Excludes sandboxes (`spikes/`) and third-party dependencies.
21
21
  - **Non-Blocking:** Configured with `continue-on-error: true` so quality failures do not block the pipeline.
22
22
 
@@ -97,16 +97,32 @@ jobs:
97
97
  - name: Install dependencies
98
98
  run: {runner} sync --frozen
99
99
 
100
- # Quote any step name that contains a colon. An unquoted YAML plain
101
- # scalar cannot contain ": " (colon+space) — it would be parsed as a
102
- # nested mapping and fail the entire workflow.
103
- - name: "Run Pre-commit Hooks (fast: formatters, secrets)"
100
+ # Each check runs with `if: success() || failure()` so all checks run
101
+ # even if an earlier check fails.
102
+ - name: "Secrets Check (detect-secrets)"
103
+ if: success() || failure()
104
104
  run: |
105
- {runner} pre-commit run --all-files
105
+ {runner} pre-commit run detect-secrets --all-files
106
106
 
107
- - name: "Run Pre-commit Hooks (heavy: types, security, structural)"
107
+ - name: "Code Formatting (ruff format)"
108
+ if: success() || failure()
108
109
  run: |
109
- {runner} pre-commit run --all-files --hook-stage manual
110
+ {runner} pre-commit run ruff-format --all-files
111
+
112
+ - name: "Linter (ruff check)"
113
+ if: success() || failure()
114
+ run: |
115
+ {runner} pre-commit run ruff-lint --all-files
116
+
117
+ - name: "Type Checker (mypy)"
118
+ if: success() || failure()
119
+ run: |
120
+ {runner} pre-commit run mypy --all-files --hook-stage manual
121
+
122
+ - name: "Security Audit (bandit & pip-audit)"
123
+ if: success() || failure()
124
+ run: |
125
+ {runner} pre-commit run bandit pip-audit --all-files --hook-stage manual
110
126
  ```
111
127
 
112
128
  ## Debug Workflow (Remote Probing Protocol)
@@ -46,11 +46,12 @@ The Remote Probing Protocol requires a reason string because it is passed as the
46
46
 
47
47
  ### Logs
48
48
  ```shell
49
- make logs 12345 'Run tests'
49
+ make logs 12345 # extract logs for ALL failed steps
50
+ make logs 12345 'Run tests' # extract logs for a specific step (substring match)
50
51
  ```
51
52
 
52
- **Why does `logs` take two arguments?**
53
- The first argument is the GitHub Actions run ID (as shown by `gh run list`); the second is the exact name of a step in that run's execution tree (as shown by `gh run view <id>`). The target extracts ONLY that step's logs, stripping ANSI escapes and GitHub's group/boilerplate markers so you see the failure without the noise of the full log. See the [CI Log Extraction](#ci-log-extraction) section for the recipe.
53
+ **How does `make logs` work?**
54
+ The first argument is the GitHub Actions run ID (as shown by `gh run list`). If invoked without a second argument, it extracts and formats logs for **all failed steps** using `gh run view --log-failed`. An optional second argument filters down to a specific step using substring matching, stripping ANSI escapes and GitHub boilerplate so you see the failure without noise. See [CI Log Extraction](#ci-log-extraction).
54
55
 
55
56
  ## Probe Script
56
57
 
@@ -204,7 +205,8 @@ ci-watch:
204
205
  if [ -n "$$NEWSTEPS" ]; then \
205
206
  echo "$$WF: failing step(s): $$NEWSTEPS (run $$NEW)"; \
206
207
  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/^/ /'; \
207
- echo " full log: make logs $$NEW '$$NEWSTEPS'"; \
208
+ echo " view all failed logs: make logs $$NEW"; \
209
+ echo " view specific step: make logs $$NEW '<step-name>'"; \
208
210
  fi; \
209
211
  if [ "$$NEWCONC" != "failure" ]; then \
210
212
  if [ -n "$$NEWFAIL" ]; then \
@@ -267,7 +269,7 @@ probe:
267
269
 
268
270
  ## CI Log Extraction
269
271
 
270
- The Debugger's Reproduction phase needs to read the logs of a specific failed CI step without drowning in the full run log. The `make logs` target wraps the `gh run view <id> --log | awk ...` pipeline that isolates the named step's output, strips ANSI escapes, and removes GitHub's `##[group]`/`##[endgroup]` boilerplate.
272
+ The Debugger's Reproduction phase needs to read CI logs without drowning in the full run output. The `make logs` target wraps the `gh run view` pipeline, strips ANSI escapes, and removes GitHub's `##[group]`/`##[endgroup]` boilerplate.
271
273
 
272
274
  ### Example
273
275
 
@@ -276,21 +278,26 @@ logs: LOGS_RUN := $(word 2,$(MAKECMDGOALS))
276
278
  logs: LOGS_STEP := $(wordlist 3,99,$(MAKECMDGOALS))
277
279
 
278
280
  logs:
279
- @[ -n "$(LOGS_RUN)" ] || { echo "Usage: make logs <run-id> '<step-name>'"; exit 1; }
280
- @gh run view "$(LOGS_RUN)" --log | awk -F'\t' -v step="$(LOGS_STEP)" '$$2==step { if(j!=$$1){j=$$1; print "\n["j"]"} 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 }'
281
+ @[ -n "$(LOGS_RUN)" ] || { echo "Usage: make logs <run-id> ['<step-name>']"; exit 1; }
282
+ @if [ -z "$(LOGS_STEP)" ]; then \
283
+ gh run view "$(LOGS_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 }'; \
284
+ else \
285
+ gh run view "$(LOGS_RUN)" --log 2>/dev/null | awk -F'\t' -v step="$(LOGS_STEP)" 'index($$2, step) > 0 { 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 }'; \
286
+ fi
281
287
 
282
288
  %:
283
289
  @:
284
290
  ```
285
291
 
286
292
  **Usage:**
287
- - `make logs 12345 'Run tests'` — extract the logs of the step named `Run tests` from run `12345`.
288
- - First discover the run ID and the failed step name with `gh run view 12345` (the execution tree), then pass both to `make logs`.
293
+ - `make logs 12345` — extract logs for ALL failed steps from run `12345`.
294
+ - `make logs 12345 'Run tests'` — extract logs for a specific step (substring match) from run `12345`.
289
295
 
290
296
  **How it works:**
291
- - `$(word 2,$(MAKECMDGOALS))` takes the run ID and `$(wordlist 3,99,$(MAKECMDGOALS))` takes the (space-containing) step name; the first goal (the `logs` target itself) is dropped.
292
- - The `awk` program matches rows whose second tab-separated field equals the step name via `-v step=...`, trims the leading timestamp, strips ANSI escape sequences, and removes GitHub's group boilerplate, prefixing `##[error]` lines with `Error: `.
293
- - It reuses the same cross-platform Make constructs as the other targets (see [Cross-Platform Design](#cross-platform-design)); the `%: @:` catch-all prevents the extra `make` goals from being treated as files.
297
+ - `$(word 2,$(MAKECMDGOALS))` takes the run ID and `$(wordlist 3,99,$(MAKECMDGOALS))` captures any optional step name.
298
+ - When no step name is provided, `gh run view --log-failed` is used so only failed steps are fetched and printed with `[job > step]` headers.
299
+ - When a step name is supplied, `index($2, step) > 0` performs substring matching against column 2.
300
+ - Timestamps and ANSI escapes are stripped, and `##[error]` lines are prefixed with `Error: `.
294
301
 
295
302
  ## Implementation Notes
296
303