code-puppy 0.0.326__tar.gz → 0.0.327__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 (166) hide show
  1. {code_puppy-0.0.326 → code_puppy-0.0.327}/PKG-INFO +30 -1
  2. {code_puppy-0.0.326 → code_puppy-0.0.327}/README.md +29 -0
  3. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/command_line/config_commands.py +24 -1
  4. {code_puppy-0.0.326 → code_puppy-0.0.327}/pyproject.toml +1 -1
  5. {code_puppy-0.0.326 → code_puppy-0.0.327}/.gitignore +0 -0
  6. {code_puppy-0.0.326 → code_puppy-0.0.327}/LICENSE +0 -0
  7. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/__init__.py +0 -0
  8. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/__main__.py +0 -0
  9. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/agents/__init__.py +0 -0
  10. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/agents/agent_c_reviewer.py +0 -0
  11. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/agents/agent_code_puppy.py +0 -0
  12. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/agents/agent_code_reviewer.py +0 -0
  13. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/agents/agent_cpp_reviewer.py +0 -0
  14. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/agents/agent_creator_agent.py +0 -0
  15. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/agents/agent_golang_reviewer.py +0 -0
  16. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/agents/agent_javascript_reviewer.py +0 -0
  17. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/agents/agent_manager.py +0 -0
  18. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/agents/agent_planning.py +0 -0
  19. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/agents/agent_python_programmer.py +0 -0
  20. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/agents/agent_python_reviewer.py +0 -0
  21. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/agents/agent_qa_expert.py +0 -0
  22. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/agents/agent_qa_kitten.py +0 -0
  23. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/agents/agent_security_auditor.py +0 -0
  24. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/agents/agent_typescript_reviewer.py +0 -0
  25. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/agents/base_agent.py +0 -0
  26. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/agents/json_agent.py +0 -0
  27. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/agents/prompt_reviewer.py +0 -0
  28. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/callbacks.py +0 -0
  29. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/chatgpt_codex_client.py +0 -0
  30. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/claude_cache_client.py +0 -0
  31. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/cli_runner.py +0 -0
  32. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/command_line/__init__.py +0 -0
  33. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/command_line/add_model_menu.py +0 -0
  34. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/command_line/attachments.py +0 -0
  35. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/command_line/autosave_menu.py +0 -0
  36. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/command_line/colors_menu.py +0 -0
  37. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/command_line/command_handler.py +0 -0
  38. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/command_line/command_registry.py +0 -0
  39. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/command_line/core_commands.py +0 -0
  40. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/command_line/diff_menu.py +0 -0
  41. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/command_line/file_path_completion.py +0 -0
  42. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/command_line/load_context_completion.py +0 -0
  43. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/command_line/mcp/__init__.py +0 -0
  44. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/command_line/mcp/add_command.py +0 -0
  45. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/command_line/mcp/base.py +0 -0
  46. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/command_line/mcp/catalog_server_installer.py +0 -0
  47. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/command_line/mcp/custom_server_form.py +0 -0
  48. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/command_line/mcp/custom_server_installer.py +0 -0
  49. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/command_line/mcp/edit_command.py +0 -0
  50. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/command_line/mcp/handler.py +0 -0
  51. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/command_line/mcp/help_command.py +0 -0
  52. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/command_line/mcp/install_command.py +0 -0
  53. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/command_line/mcp/install_menu.py +0 -0
  54. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/command_line/mcp/list_command.py +0 -0
  55. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/command_line/mcp/logs_command.py +0 -0
  56. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/command_line/mcp/remove_command.py +0 -0
  57. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/command_line/mcp/restart_command.py +0 -0
  58. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/command_line/mcp/search_command.py +0 -0
  59. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/command_line/mcp/start_all_command.py +0 -0
  60. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/command_line/mcp/start_command.py +0 -0
  61. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/command_line/mcp/status_command.py +0 -0
  62. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/command_line/mcp/stop_all_command.py +0 -0
  63. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/command_line/mcp/stop_command.py +0 -0
  64. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/command_line/mcp/test_command.py +0 -0
  65. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/command_line/mcp/utils.py +0 -0
  66. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/command_line/mcp/wizard_utils.py +0 -0
  67. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/command_line/mcp_completion.py +0 -0
  68. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/command_line/model_picker_completion.py +0 -0
  69. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/command_line/model_settings_menu.py +0 -0
  70. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/command_line/motd.py +0 -0
  71. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/command_line/pin_command_completion.py +0 -0
  72. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/command_line/prompt_toolkit_completion.py +0 -0
  73. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/command_line/session_commands.py +0 -0
  74. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/command_line/utils.py +0 -0
  75. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/config.py +0 -0
  76. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/error_logging.py +0 -0
  77. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/gemini_code_assist.py +0 -0
  78. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/http_utils.py +0 -0
  79. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/keymap.py +0 -0
  80. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/main.py +0 -0
  81. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/mcp_/__init__.py +0 -0
  82. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/mcp_/async_lifecycle.py +0 -0
  83. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/mcp_/blocking_startup.py +0 -0
  84. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/mcp_/captured_stdio_server.py +0 -0
  85. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/mcp_/circuit_breaker.py +0 -0
  86. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/mcp_/config_wizard.py +0 -0
  87. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/mcp_/dashboard.py +0 -0
  88. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/mcp_/error_isolation.py +0 -0
  89. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/mcp_/examples/retry_example.py +0 -0
  90. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/mcp_/health_monitor.py +0 -0
  91. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/mcp_/managed_server.py +0 -0
  92. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/mcp_/manager.py +0 -0
  93. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/mcp_/mcp_logs.py +0 -0
  94. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/mcp_/registry.py +0 -0
  95. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/mcp_/retry_manager.py +0 -0
  96. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/mcp_/server_registry_catalog.py +0 -0
  97. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/mcp_/status_tracker.py +0 -0
  98. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/mcp_/system_tools.py +0 -0
  99. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/messaging/__init__.py +0 -0
  100. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/messaging/bus.py +0 -0
  101. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/messaging/commands.py +0 -0
  102. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/messaging/markdown_patches.py +0 -0
  103. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/messaging/message_queue.py +0 -0
  104. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/messaging/messages.py +0 -0
  105. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/messaging/queue_console.py +0 -0
  106. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/messaging/renderers.py +0 -0
  107. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/messaging/rich_renderer.py +0 -0
  108. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/messaging/spinner/__init__.py +0 -0
  109. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/messaging/spinner/console_spinner.py +0 -0
  110. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/messaging/spinner/spinner_base.py +0 -0
  111. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/model_factory.py +0 -0
  112. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/model_utils.py +0 -0
  113. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/models.json +0 -0
  114. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/models_dev_api.json +0 -0
  115. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/models_dev_parser.py +0 -0
  116. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/plugins/__init__.py +0 -0
  117. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/plugins/chatgpt_oauth/__init__.py +0 -0
  118. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/plugins/chatgpt_oauth/config.py +0 -0
  119. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/plugins/chatgpt_oauth/oauth_flow.py +0 -0
  120. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/plugins/chatgpt_oauth/register_callbacks.py +0 -0
  121. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/plugins/chatgpt_oauth/test_plugin.py +0 -0
  122. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/plugins/chatgpt_oauth/utils.py +0 -0
  123. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/plugins/claude_code_oauth/README.md +0 -0
  124. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/plugins/claude_code_oauth/SETUP.md +0 -0
  125. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/plugins/claude_code_oauth/__init__.py +0 -0
  126. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/plugins/claude_code_oauth/config.py +0 -0
  127. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/plugins/claude_code_oauth/register_callbacks.py +0 -0
  128. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/plugins/claude_code_oauth/test_plugin.py +0 -0
  129. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/plugins/claude_code_oauth/utils.py +0 -0
  130. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/plugins/customizable_commands/__init__.py +0 -0
  131. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/plugins/customizable_commands/register_callbacks.py +0 -0
  132. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/plugins/example_custom_command/README.md +0 -0
  133. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/plugins/example_custom_command/register_callbacks.py +0 -0
  134. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/plugins/file_permission_handler/__init__.py +0 -0
  135. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/plugins/file_permission_handler/register_callbacks.py +0 -0
  136. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/plugins/oauth_puppy_html.py +0 -0
  137. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/plugins/shell_safety/__init__.py +0 -0
  138. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/plugins/shell_safety/agent_shell_safety.py +0 -0
  139. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/plugins/shell_safety/command_cache.py +0 -0
  140. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/plugins/shell_safety/register_callbacks.py +0 -0
  141. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/prompts/codex_system_prompt.md +0 -0
  142. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/pydantic_patches.py +0 -0
  143. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/reopenable_async_client.py +0 -0
  144. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/round_robin_model.py +0 -0
  145. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/session_storage.py +0 -0
  146. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/status_display.py +0 -0
  147. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/summarization_agent.py +0 -0
  148. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/terminal_utils.py +0 -0
  149. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/tools/__init__.py +0 -0
  150. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/tools/agent_tools.py +0 -0
  151. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/tools/browser/__init__.py +0 -0
  152. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/tools/browser/browser_control.py +0 -0
  153. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/tools/browser/browser_interactions.py +0 -0
  154. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/tools/browser/browser_locators.py +0 -0
  155. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/tools/browser/browser_navigation.py +0 -0
  156. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/tools/browser/browser_screenshot.py +0 -0
  157. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/tools/browser/browser_scripts.py +0 -0
  158. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/tools/browser/browser_workflows.py +0 -0
  159. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/tools/browser/camoufox_manager.py +0 -0
  160. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/tools/browser/vqa_agent.py +0 -0
  161. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/tools/command_runner.py +0 -0
  162. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/tools/common.py +0 -0
  163. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/tools/file_modifications.py +0 -0
  164. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/tools/file_operations.py +0 -0
  165. {code_puppy-0.0.326 → code_puppy-0.0.327}/code_puppy/tools/tools_content.py +0 -0
  166. {code_puppy-0.0.326 → code_puppy-0.0.327}/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.326
3
+ Version: 0.0.327
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
@@ -100,6 +100,8 @@ uvx code-puppy -i
100
100
 
101
101
  ### UV (Recommended)
102
102
 
103
+ #### macOS / Linux
104
+
103
105
  ```bash
104
106
  # Install UV if you don't have it
105
107
  curl -LsSf https://astral.sh/uv/install.sh | sh
@@ -112,6 +114,33 @@ source ~/.zshrc # or ~/.bashrc
112
114
  uvx code-puppy -i
113
115
  ```
114
116
 
117
+ #### Windows
118
+
119
+ On Windows, we recommend installing code-puppy as a global tool for the best experience with keyboard shortcuts (Ctrl+C/Ctrl+X cancellation):
120
+
121
+ ```powershell
122
+ # Install UV if you don't have it (run in PowerShell as Admin)
123
+ powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
124
+
125
+ # Install code-puppy as a global tool
126
+ uv tool install code-puppy
127
+
128
+ # Run code-puppy
129
+ code-puppy -i
130
+ ```
131
+
132
+ **Why `uv tool install` on Windows?** Running with `uvx` creates an extra process layer that can interfere with keyboard signal handling (Ctrl+C, Ctrl+X). Installing as a tool runs code-puppy directly for reliable cancellation.
133
+
134
+ #### Upgrading
135
+
136
+ ```bash
137
+ # Upgrade code-puppy to the latest version
138
+ uv tool upgrade code-puppy
139
+
140
+ # Or upgrade all installed tools
141
+ uv tool upgrade --all
142
+ ```
143
+
115
144
  UV will automatically download the latest compatible Python version (3.11+) if your system doesn't have one.
116
145
 
117
146
  ### pip (Alternative)
@@ -61,6 +61,8 @@ uvx code-puppy -i
61
61
 
62
62
  ### UV (Recommended)
63
63
 
64
+ #### macOS / Linux
65
+
64
66
  ```bash
65
67
  # Install UV if you don't have it
66
68
  curl -LsSf https://astral.sh/uv/install.sh | sh
@@ -73,6 +75,33 @@ source ~/.zshrc # or ~/.bashrc
73
75
  uvx code-puppy -i
74
76
  ```
75
77
 
78
+ #### Windows
79
+
80
+ On Windows, we recommend installing code-puppy as a global tool for the best experience with keyboard shortcuts (Ctrl+C/Ctrl+X cancellation):
81
+
82
+ ```powershell
83
+ # Install UV if you don't have it (run in PowerShell as Admin)
84
+ powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
85
+
86
+ # Install code-puppy as a global tool
87
+ uv tool install code-puppy
88
+
89
+ # Run code-puppy
90
+ code-puppy -i
91
+ ```
92
+
93
+ **Why `uv tool install` on Windows?** Running with `uvx` creates an extra process layer that can interfere with keyboard signal handling (Ctrl+C, Ctrl+X). Installing as a tool runs code-puppy directly for reliable cancellation.
94
+
95
+ #### Upgrading
96
+
97
+ ```bash
98
+ # Upgrade code-puppy to the latest version
99
+ uv tool upgrade code-puppy
100
+
101
+ # Or upgrade all installed tools
102
+ uv tool upgrade --all
103
+ ```
104
+
76
105
  UV will automatically download the latest compatible Python version (3.11+) if your system doesn't have one.
77
106
 
78
107
  ### pip (Alternative)
@@ -46,6 +46,7 @@ def handle_show_command(command: str) -> bool:
46
46
  get_use_dbos,
47
47
  get_yolo_mode,
48
48
  )
49
+ from code_puppy.keymap import get_cancel_agent_key, get_cancel_agent_display_name
49
50
  from code_puppy.messaging import emit_info
50
51
 
51
52
  puppy_name = get_puppy_name()
@@ -79,6 +80,7 @@ def handle_show_command(command: str) -> bool:
79
80
  [bold]reasoning_effort:[/bold] [cyan]{get_openai_reasoning_effort()}[/cyan]
80
81
  [bold]verbosity:[/bold] [cyan]{get_openai_verbosity()}[/cyan]
81
82
  [bold]temperature:[/bold] [cyan]{effective_temperature if effective_temperature is not None else "(model default)"}[/cyan]{" (per-model)" if effective_temperature != global_temperature and effective_temperature is not None else ""}
83
+ [bold]cancel_agent_key:[/bold] [cyan]{get_cancel_agent_display_name()}[/cyan] (options: ctrl+c, ctrl+k, ctrl+q)
82
84
 
83
85
  """
84
86
  emit_info(Text.from_markup(status_msg))
@@ -200,9 +202,13 @@ def handle_set_command(command: str) -> bool:
200
202
  "\n[yellow]Session Management[/yellow]"
201
203
  "\n [cyan]auto_save_session[/cyan] Auto-save chat after every response (true/false)"
202
204
  )
205
+ keymap_help = (
206
+ "\n[yellow]Keyboard Shortcuts[/yellow]"
207
+ "\n [cyan]cancel_agent_key[/cyan] Key to cancel agent tasks (ctrl+c, ctrl+k, or ctrl+q)"
208
+ )
203
209
  emit_warning(
204
210
  Text.from_markup(
205
- f"Usage: /set KEY=VALUE or /set KEY VALUE\nConfig keys: {', '.join(config_keys)}\n[dim]Note: compaction_strategy can be 'summarization' or 'truncation'[/dim]{session_help}"
211
+ f"Usage: /set KEY=VALUE or /set KEY VALUE\nConfig keys: {', '.join(config_keys)}\n[dim]Note: compaction_strategy can be 'summarization' or 'truncation'[/dim]{session_help}{keymap_help}"
206
212
  )
207
213
  )
208
214
  return True
@@ -215,6 +221,23 @@ def handle_set_command(command: str) -> bool:
215
221
  )
216
222
  )
217
223
 
224
+ # Validate cancel_agent_key before setting
225
+ if key == "cancel_agent_key":
226
+ from code_puppy.keymap import VALID_CANCEL_KEYS
227
+
228
+ normalized_value = value.strip().lower()
229
+ if normalized_value not in VALID_CANCEL_KEYS:
230
+ emit_error(
231
+ f"Invalid cancel_agent_key '{value}'. Valid options: {', '.join(sorted(VALID_CANCEL_KEYS))}"
232
+ )
233
+ return True
234
+ value = normalized_value # Use normalized value
235
+ emit_info(
236
+ Text.from_markup(
237
+ "[yellow]⚠️ cancel_agent_key changed. Please restart Code Puppy for this change to take effect.[/yellow]"
238
+ )
239
+ )
240
+
218
241
  set_config_value(key, value)
219
242
  emit_success(f'Set {key} = "{value}" in puppy.cfg!')
220
243
 
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "code-puppy"
7
- version = "0.0.326"
7
+ version = "0.0.327"
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