code-puppy 0.0.341__tar.gz → 0.0.343__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 (182) hide show
  1. {code_puppy-0.0.341 → code_puppy-0.0.343}/PKG-INFO +1 -1
  2. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/command_line/prompt_toolkit_completion.py +16 -10
  3. {code_puppy-0.0.341 → code_puppy-0.0.343}/pyproject.toml +1 -1
  4. {code_puppy-0.0.341 → code_puppy-0.0.343}/.gitignore +0 -0
  5. {code_puppy-0.0.341 → code_puppy-0.0.343}/LICENSE +0 -0
  6. {code_puppy-0.0.341 → code_puppy-0.0.343}/README.md +0 -0
  7. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/__init__.py +0 -0
  8. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/__main__.py +0 -0
  9. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/agents/__init__.py +0 -0
  10. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/agents/agent_c_reviewer.py +0 -0
  11. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/agents/agent_code_puppy.py +0 -0
  12. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/agents/agent_code_reviewer.py +0 -0
  13. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/agents/agent_cpp_reviewer.py +0 -0
  14. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/agents/agent_creator_agent.py +0 -0
  15. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/agents/agent_golang_reviewer.py +0 -0
  16. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/agents/agent_javascript_reviewer.py +0 -0
  17. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/agents/agent_manager.py +0 -0
  18. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/agents/agent_planning.py +0 -0
  19. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/agents/agent_python_programmer.py +0 -0
  20. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/agents/agent_python_reviewer.py +0 -0
  21. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/agents/agent_qa_expert.py +0 -0
  22. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/agents/agent_qa_kitten.py +0 -0
  23. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/agents/agent_security_auditor.py +0 -0
  24. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/agents/agent_typescript_reviewer.py +0 -0
  25. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/agents/base_agent.py +0 -0
  26. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/agents/json_agent.py +0 -0
  27. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/agents/prompt_reviewer.py +0 -0
  28. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/callbacks.py +0 -0
  29. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/chatgpt_codex_client.py +0 -0
  30. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/claude_cache_client.py +0 -0
  31. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/cli_runner.py +0 -0
  32. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/command_line/__init__.py +0 -0
  33. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/command_line/add_model_menu.py +0 -0
  34. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/command_line/attachments.py +0 -0
  35. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/command_line/autosave_menu.py +0 -0
  36. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/command_line/clipboard.py +0 -0
  37. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/command_line/colors_menu.py +0 -0
  38. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/command_line/command_handler.py +0 -0
  39. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/command_line/command_registry.py +0 -0
  40. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/command_line/config_commands.py +0 -0
  41. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/command_line/core_commands.py +0 -0
  42. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/command_line/diff_menu.py +0 -0
  43. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/command_line/file_path_completion.py +0 -0
  44. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/command_line/load_context_completion.py +0 -0
  45. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/command_line/mcp/__init__.py +0 -0
  46. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/command_line/mcp/add_command.py +0 -0
  47. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/command_line/mcp/base.py +0 -0
  48. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/command_line/mcp/catalog_server_installer.py +0 -0
  49. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/command_line/mcp/custom_server_form.py +0 -0
  50. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/command_line/mcp/custom_server_installer.py +0 -0
  51. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/command_line/mcp/edit_command.py +0 -0
  52. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/command_line/mcp/handler.py +0 -0
  53. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/command_line/mcp/help_command.py +0 -0
  54. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/command_line/mcp/install_command.py +0 -0
  55. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/command_line/mcp/install_menu.py +0 -0
  56. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/command_line/mcp/list_command.py +0 -0
  57. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/command_line/mcp/logs_command.py +0 -0
  58. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/command_line/mcp/remove_command.py +0 -0
  59. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/command_line/mcp/restart_command.py +0 -0
  60. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/command_line/mcp/search_command.py +0 -0
  61. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/command_line/mcp/start_all_command.py +0 -0
  62. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/command_line/mcp/start_command.py +0 -0
  63. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/command_line/mcp/status_command.py +0 -0
  64. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/command_line/mcp/stop_all_command.py +0 -0
  65. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/command_line/mcp/stop_command.py +0 -0
  66. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/command_line/mcp/test_command.py +0 -0
  67. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/command_line/mcp/utils.py +0 -0
  68. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/command_line/mcp/wizard_utils.py +0 -0
  69. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/command_line/mcp_completion.py +0 -0
  70. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/command_line/model_picker_completion.py +0 -0
  71. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/command_line/model_settings_menu.py +0 -0
  72. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/command_line/motd.py +0 -0
  73. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/command_line/onboarding_slides.py +0 -0
  74. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/command_line/onboarding_wizard.py +0 -0
  75. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/command_line/pin_command_completion.py +0 -0
  76. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/command_line/session_commands.py +0 -0
  77. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/command_line/utils.py +0 -0
  78. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/config.py +0 -0
  79. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/error_logging.py +0 -0
  80. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/gemini_code_assist.py +0 -0
  81. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/http_utils.py +0 -0
  82. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/keymap.py +0 -0
  83. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/main.py +0 -0
  84. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/mcp_/__init__.py +0 -0
  85. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/mcp_/async_lifecycle.py +0 -0
  86. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/mcp_/blocking_startup.py +0 -0
  87. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/mcp_/captured_stdio_server.py +0 -0
  88. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/mcp_/circuit_breaker.py +0 -0
  89. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/mcp_/config_wizard.py +0 -0
  90. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/mcp_/dashboard.py +0 -0
  91. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/mcp_/error_isolation.py +0 -0
  92. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/mcp_/examples/retry_example.py +0 -0
  93. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/mcp_/health_monitor.py +0 -0
  94. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/mcp_/managed_server.py +0 -0
  95. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/mcp_/manager.py +0 -0
  96. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/mcp_/mcp_logs.py +0 -0
  97. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/mcp_/registry.py +0 -0
  98. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/mcp_/retry_manager.py +0 -0
  99. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/mcp_/server_registry_catalog.py +0 -0
  100. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/mcp_/status_tracker.py +0 -0
  101. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/mcp_/system_tools.py +0 -0
  102. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/messaging/__init__.py +0 -0
  103. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/messaging/bus.py +0 -0
  104. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/messaging/commands.py +0 -0
  105. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/messaging/markdown_patches.py +0 -0
  106. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/messaging/message_queue.py +0 -0
  107. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/messaging/messages.py +0 -0
  108. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/messaging/queue_console.py +0 -0
  109. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/messaging/renderers.py +0 -0
  110. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/messaging/rich_renderer.py +0 -0
  111. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/messaging/spinner/__init__.py +0 -0
  112. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/messaging/spinner/console_spinner.py +0 -0
  113. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/messaging/spinner/spinner_base.py +0 -0
  114. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/model_factory.py +0 -0
  115. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/model_utils.py +0 -0
  116. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/models.json +0 -0
  117. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/models_dev_api.json +0 -0
  118. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/models_dev_parser.py +0 -0
  119. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/plugins/__init__.py +0 -0
  120. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/plugins/antigravity_oauth/__init__.py +0 -0
  121. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/plugins/antigravity_oauth/accounts.py +0 -0
  122. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/plugins/antigravity_oauth/antigravity_model.py +0 -0
  123. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/plugins/antigravity_oauth/config.py +0 -0
  124. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/plugins/antigravity_oauth/constants.py +0 -0
  125. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/plugins/antigravity_oauth/oauth.py +0 -0
  126. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/plugins/antigravity_oauth/register_callbacks.py +0 -0
  127. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/plugins/antigravity_oauth/storage.py +0 -0
  128. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/plugins/antigravity_oauth/test_plugin.py +0 -0
  129. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/plugins/antigravity_oauth/token.py +0 -0
  130. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/plugins/antigravity_oauth/transport.py +0 -0
  131. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/plugins/antigravity_oauth/utils.py +0 -0
  132. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/plugins/chatgpt_oauth/__init__.py +0 -0
  133. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/plugins/chatgpt_oauth/config.py +0 -0
  134. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/plugins/chatgpt_oauth/oauth_flow.py +0 -0
  135. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/plugins/chatgpt_oauth/register_callbacks.py +0 -0
  136. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/plugins/chatgpt_oauth/test_plugin.py +0 -0
  137. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/plugins/chatgpt_oauth/utils.py +0 -0
  138. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/plugins/claude_code_oauth/README.md +0 -0
  139. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/plugins/claude_code_oauth/SETUP.md +0 -0
  140. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/plugins/claude_code_oauth/__init__.py +0 -0
  141. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/plugins/claude_code_oauth/config.py +0 -0
  142. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/plugins/claude_code_oauth/register_callbacks.py +0 -0
  143. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/plugins/claude_code_oauth/test_plugin.py +0 -0
  144. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/plugins/claude_code_oauth/utils.py +0 -0
  145. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/plugins/customizable_commands/__init__.py +0 -0
  146. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/plugins/customizable_commands/register_callbacks.py +0 -0
  147. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/plugins/example_custom_command/README.md +0 -0
  148. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/plugins/example_custom_command/register_callbacks.py +0 -0
  149. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/plugins/file_permission_handler/__init__.py +0 -0
  150. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/plugins/file_permission_handler/register_callbacks.py +0 -0
  151. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/plugins/oauth_puppy_html.py +0 -0
  152. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/plugins/shell_safety/__init__.py +0 -0
  153. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/plugins/shell_safety/agent_shell_safety.py +0 -0
  154. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/plugins/shell_safety/command_cache.py +0 -0
  155. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/plugins/shell_safety/register_callbacks.py +0 -0
  156. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/prompts/codex_system_prompt.md +0 -0
  157. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/pydantic_patches.py +0 -0
  158. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/reopenable_async_client.py +0 -0
  159. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/round_robin_model.py +0 -0
  160. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/session_storage.py +0 -0
  161. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/status_display.py +0 -0
  162. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/summarization_agent.py +0 -0
  163. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/terminal_utils.py +0 -0
  164. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/tools/__init__.py +0 -0
  165. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/tools/agent_tools.py +0 -0
  166. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/tools/browser/__init__.py +0 -0
  167. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/tools/browser/browser_control.py +0 -0
  168. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/tools/browser/browser_interactions.py +0 -0
  169. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/tools/browser/browser_locators.py +0 -0
  170. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/tools/browser/browser_navigation.py +0 -0
  171. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/tools/browser/browser_screenshot.py +0 -0
  172. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/tools/browser/browser_scripts.py +0 -0
  173. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/tools/browser/browser_workflows.py +0 -0
  174. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/tools/browser/camoufox_manager.py +0 -0
  175. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/tools/browser/vqa_agent.py +0 -0
  176. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/tools/command_runner.py +0 -0
  177. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/tools/common.py +0 -0
  178. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/tools/file_modifications.py +0 -0
  179. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/tools/file_operations.py +0 -0
  180. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/tools/tools_content.py +0 -0
  181. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/uvx_detection.py +0 -0
  182. {code_puppy-0.0.341 → code_puppy-0.0.343}/code_puppy/version_checker.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-puppy
3
- Version: 0.0.341
3
+ Version: 0.0.343
4
4
  Summary: Code generation agent
5
5
  Project-URL: repository, https://github.com/mpfaffenberger/code_puppy
6
6
  Project-URL: HomePage, https://github.com/mpfaffenberger/code_puppy
@@ -648,30 +648,36 @@ async def get_input_with_combined_completion(
648
648
  else:
649
649
  event.current_buffer.validate_and_handle()
650
650
 
651
- # Handle bracketed paste (triggered by most terminal Cmd+V / Ctrl+V)
652
- # This is the PRIMARY paste handler - works with Cmd+V on macOS terminals
651
+ # Handle bracketed paste - smart detection for text vs images.
652
+ # Most terminals (Windows included!) send Ctrl+V through bracketed paste.
653
+ # - If there's meaningful text content → paste as text (drag-and-drop file paths, copied text)
654
+ # - If text is empty/whitespace → check for clipboard image (image paste on Windows)
653
655
  @bindings.add(Keys.BracketedPaste)
654
656
  def handle_bracketed_paste(event):
655
- """Handle bracketed paste - works with Cmd+V on macOS terminals."""
656
- # The pasted data is in event.data
657
+ """Handle bracketed paste - smart text vs image detection."""
657
658
  pasted_data = event.data
658
659
 
659
- # Check if clipboard has an image (the pasted text might just be empty or a file path)
660
+ # If we have meaningful text content, paste it (don't check for images)
661
+ # This handles drag-and-drop file paths and normal text paste
662
+ if pasted_data and pasted_data.strip():
663
+ # Normalize Windows line endings to Unix style
664
+ sanitized_data = pasted_data.replace("\r\n", "\n").replace("\r", "\n")
665
+ event.app.current_buffer.insert_text(sanitized_data)
666
+ return
667
+
668
+ # No meaningful text - check if clipboard has an image (Windows image paste!)
660
669
  try:
661
670
  if has_image_in_clipboard():
662
671
  placeholder = capture_clipboard_image_to_pending()
663
672
  if placeholder:
664
673
  event.app.current_buffer.insert_text(placeholder + " ")
665
- # The placeholder itself is visible feedback - no need for extra output
666
- # Use bell for audible feedback (works in most terminals)
667
674
  event.app.output.bell()
668
- return # Don't also paste the text data
675
+ return
669
676
  except Exception:
670
677
  pass
671
678
 
672
- # No image - insert the pasted text as normal, sanitizing Windows newlines
679
+ # Fallback: if there was whitespace-only data, paste it
673
680
  if pasted_data:
674
- # Normalize Windows line endings to Unix style
675
681
  sanitized_data = pasted_data.replace("\r\n", "\n").replace("\r", "\n")
676
682
  event.app.current_buffer.insert_text(sanitized_data)
677
683
 
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "code-puppy"
7
- version = "0.0.341"
7
+ version = "0.0.343"
8
8
  description = "Code generation agent"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11,<3.14"
File without changes
File without changes
File without changes