code-puppy 0.0.186__tar.gz → 0.0.314__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 (206) hide show
  1. {code_puppy-0.0.186 → code_puppy-0.0.314}/.gitignore +4 -0
  2. {code_puppy-0.0.186 → code_puppy-0.0.314}/PKG-INFO +190 -53
  3. {code_puppy-0.0.186 → code_puppy-0.0.314}/README.md +180 -36
  4. code_puppy-0.0.314/code_puppy/__init__.py +10 -0
  5. {code_puppy-0.0.186 → code_puppy-0.0.314}/code_puppy/agents/agent_c_reviewer.py +60 -9
  6. {code_puppy-0.0.186 → code_puppy-0.0.314}/code_puppy/agents/agent_code_puppy.py +7 -1
  7. {code_puppy-0.0.186 → code_puppy-0.0.314}/code_puppy/agents/agent_code_reviewer.py +12 -2
  8. code_puppy-0.0.314/code_puppy/agents/agent_cpp_reviewer.py +132 -0
  9. {code_puppy-0.0.186 → code_puppy-0.0.314}/code_puppy/agents/agent_creator_agent.py +45 -4
  10. code_puppy-0.0.314/code_puppy/agents/agent_golang_reviewer.py +151 -0
  11. code_puppy-0.0.314/code_puppy/agents/agent_javascript_reviewer.py +160 -0
  12. {code_puppy-0.0.186 → code_puppy-0.0.314}/code_puppy/agents/agent_manager.py +58 -11
  13. code_puppy-0.0.314/code_puppy/agents/agent_planning.py +163 -0
  14. code_puppy-0.0.314/code_puppy/agents/agent_python_programmer.py +165 -0
  15. {code_puppy-0.0.186 → code_puppy-0.0.314}/code_puppy/agents/agent_python_reviewer.py +28 -6
  16. code_puppy-0.0.314/code_puppy/agents/agent_qa_expert.py +163 -0
  17. code_puppy-0.0.314/code_puppy/agents/agent_security_auditor.py +181 -0
  18. code_puppy-0.0.314/code_puppy/agents/agent_typescript_reviewer.py +166 -0
  19. code_puppy-0.0.314/code_puppy/agents/base_agent.py +1702 -0
  20. {code_puppy-0.0.186 → code_puppy-0.0.314}/code_puppy/agents/json_agent.py +8 -0
  21. code_puppy-0.0.314/code_puppy/agents/prompt_reviewer.py +145 -0
  22. {code_puppy-0.0.186 → code_puppy-0.0.314}/code_puppy/callbacks.py +101 -4
  23. code_puppy-0.0.314/code_puppy/chatgpt_codex_client.py +281 -0
  24. code_puppy-0.0.314/code_puppy/claude_cache_client.py +165 -0
  25. code_puppy-0.0.314/code_puppy/command_line/add_model_menu.py +1065 -0
  26. code_puppy-0.0.314/code_puppy/command_line/attachments.py +395 -0
  27. code_puppy-0.0.314/code_puppy/command_line/autosave_menu.py +606 -0
  28. code_puppy-0.0.314/code_puppy/command_line/command_handler.py +282 -0
  29. code_puppy-0.0.314/code_puppy/command_line/command_registry.py +150 -0
  30. code_puppy-0.0.314/code_puppy/command_line/config_commands.py +661 -0
  31. code_puppy-0.0.314/code_puppy/command_line/core_commands.py +730 -0
  32. code_puppy-0.0.314/code_puppy/command_line/diff_menu.py +858 -0
  33. {code_puppy-0.0.186 → code_puppy-0.0.314}/code_puppy/command_line/load_context_completion.py +15 -22
  34. {code_puppy-0.0.186 → code_puppy-0.0.314}/code_puppy/command_line/mcp/add_command.py +3 -16
  35. {code_puppy-0.0.186 → code_puppy-0.0.314}/code_puppy/command_line/mcp/base.py +0 -3
  36. code_puppy-0.0.314/code_puppy/command_line/mcp/catalog_server_installer.py +176 -0
  37. code_puppy-0.0.314/code_puppy/command_line/mcp/custom_server_form.py +649 -0
  38. code_puppy-0.0.314/code_puppy/command_line/mcp/custom_server_installer.py +196 -0
  39. code_puppy-0.0.314/code_puppy/command_line/mcp/edit_command.py +148 -0
  40. {code_puppy-0.0.186 → code_puppy-0.0.314}/code_puppy/command_line/mcp/handler.py +9 -2
  41. {code_puppy-0.0.186 → code_puppy-0.0.314}/code_puppy/command_line/mcp/help_command.py +7 -2
  42. {code_puppy-0.0.186 → code_puppy-0.0.314}/code_puppy/command_line/mcp/install_command.py +15 -26
  43. code_puppy-0.0.314/code_puppy/command_line/mcp/install_menu.py +681 -0
  44. {code_puppy-0.0.186 → code_puppy-0.0.314}/code_puppy/command_line/mcp/list_command.py +2 -2
  45. {code_puppy-0.0.186 → code_puppy-0.0.314}/code_puppy/command_line/mcp/logs_command.py +2 -2
  46. {code_puppy-0.0.186 → code_puppy-0.0.314}/code_puppy/command_line/mcp/remove_command.py +2 -2
  47. {code_puppy-0.0.186 → code_puppy-0.0.314}/code_puppy/command_line/mcp/restart_command.py +12 -4
  48. {code_puppy-0.0.186 → code_puppy-0.0.314}/code_puppy/command_line/mcp/search_command.py +16 -10
  49. {code_puppy-0.0.186 → code_puppy-0.0.314}/code_puppy/command_line/mcp/start_all_command.py +18 -6
  50. {code_puppy-0.0.186 → code_puppy-0.0.314}/code_puppy/command_line/mcp/start_command.py +17 -10
  51. {code_puppy-0.0.186 → code_puppy-0.0.314}/code_puppy/command_line/mcp/status_command.py +4 -5
  52. {code_puppy-0.0.186 → code_puppy-0.0.314}/code_puppy/command_line/mcp/stop_all_command.py +7 -1
  53. {code_puppy-0.0.186 → code_puppy-0.0.314}/code_puppy/command_line/mcp/stop_command.py +8 -4
  54. {code_puppy-0.0.186 → code_puppy-0.0.314}/code_puppy/command_line/mcp/test_command.py +2 -2
  55. {code_puppy-0.0.186 → code_puppy-0.0.314}/code_puppy/command_line/mcp/wizard_utils.py +20 -16
  56. code_puppy-0.0.314/code_puppy/command_line/mcp_completion.py +174 -0
  57. code_puppy-0.0.314/code_puppy/command_line/model_picker_completion.py +179 -0
  58. code_puppy-0.0.314/code_puppy/command_line/model_settings_menu.py +827 -0
  59. {code_puppy-0.0.186 → code_puppy-0.0.314}/code_puppy/command_line/motd.py +5 -5
  60. code_puppy-0.0.314/code_puppy/command_line/pin_command_completion.py +329 -0
  61. code_puppy-0.0.314/code_puppy/command_line/prompt_toolkit_completion.py +701 -0
  62. code_puppy-0.0.314/code_puppy/command_line/session_commands.py +296 -0
  63. code_puppy-0.0.314/code_puppy/config.py +1497 -0
  64. code_puppy-0.0.314/code_puppy/error_logging.py +118 -0
  65. code_puppy-0.0.314/code_puppy/gemini_code_assist.py +385 -0
  66. {code_puppy-0.0.186 → code_puppy-0.0.314}/code_puppy/http_utils.py +178 -10
  67. code_puppy-0.0.314/code_puppy/keymap.py +120 -0
  68. code_puppy-0.0.314/code_puppy/main.py +800 -0
  69. {code_puppy-0.0.186 → code_puppy-0.0.314}/code_puppy/mcp_/blocking_startup.py +9 -11
  70. {code_puppy-0.0.186 → code_puppy-0.0.314}/code_puppy/mcp_/captured_stdio_server.py +2 -2
  71. {code_puppy-0.0.186 → code_puppy-0.0.314}/code_puppy/mcp_/config_wizard.py +4 -4
  72. {code_puppy-0.0.186 → code_puppy-0.0.314}/code_puppy/mcp_/dashboard.py +15 -6
  73. {code_puppy-0.0.186 → code_puppy-0.0.314}/code_puppy/mcp_/managed_server.py +3 -21
  74. {code_puppy-0.0.186 → code_puppy-0.0.314}/code_puppy/mcp_/registry.py +6 -6
  75. {code_puppy-0.0.186 → code_puppy-0.0.314}/code_puppy/mcp_/server_registry_catalog.py +24 -5
  76. code_puppy-0.0.314/code_puppy/messaging/__init__.py +223 -0
  77. code_puppy-0.0.314/code_puppy/messaging/bus.py +610 -0
  78. code_puppy-0.0.314/code_puppy/messaging/commands.py +167 -0
  79. {code_puppy-0.0.186 → code_puppy-0.0.314}/code_puppy/messaging/message_queue.py +10 -29
  80. code_puppy-0.0.314/code_puppy/messaging/messages.py +470 -0
  81. {code_puppy-0.0.186 → code_puppy-0.0.314}/code_puppy/messaging/queue_console.py +0 -23
  82. {code_puppy-0.0.186 → code_puppy-0.0.314}/code_puppy/messaging/renderers.py +43 -146
  83. code_puppy-0.0.314/code_puppy/messaging/rich_renderer.py +877 -0
  84. {code_puppy-0.0.186 → code_puppy-0.0.314}/code_puppy/messaging/spinner/__init__.py +13 -3
  85. {code_puppy-0.0.186 → code_puppy-0.0.314}/code_puppy/messaging/spinner/console_spinner.py +85 -51
  86. {code_puppy-0.0.186 → code_puppy-0.0.314}/code_puppy/messaging/spinner/spinner_base.py +29 -0
  87. code_puppy-0.0.314/code_puppy/model_factory.py +744 -0
  88. code_puppy-0.0.314/code_puppy/model_utils.py +113 -0
  89. code_puppy-0.0.314/code_puppy/models.json +118 -0
  90. code_puppy-0.0.314/code_puppy/models_dev_api.json +1 -0
  91. code_puppy-0.0.314/code_puppy/models_dev_parser.py +592 -0
  92. code_puppy-0.0.314/code_puppy/plugins/__init__.py +174 -0
  93. code_puppy-0.0.314/code_puppy/plugins/chatgpt_oauth/__init__.py +8 -0
  94. code_puppy-0.0.314/code_puppy/plugins/chatgpt_oauth/config.py +52 -0
  95. code_puppy-0.0.314/code_puppy/plugins/chatgpt_oauth/oauth_flow.py +328 -0
  96. code_puppy-0.0.314/code_puppy/plugins/chatgpt_oauth/register_callbacks.py +92 -0
  97. code_puppy-0.0.314/code_puppy/plugins/chatgpt_oauth/test_plugin.py +293 -0
  98. code_puppy-0.0.314/code_puppy/plugins/chatgpt_oauth/utils.py +478 -0
  99. code_puppy-0.0.314/code_puppy/plugins/claude_code_oauth/README.md +167 -0
  100. code_puppy-0.0.314/code_puppy/plugins/claude_code_oauth/SETUP.md +93 -0
  101. code_puppy-0.0.314/code_puppy/plugins/claude_code_oauth/__init__.py +6 -0
  102. code_puppy-0.0.314/code_puppy/plugins/claude_code_oauth/config.py +50 -0
  103. code_puppy-0.0.314/code_puppy/plugins/claude_code_oauth/register_callbacks.py +306 -0
  104. code_puppy-0.0.314/code_puppy/plugins/claude_code_oauth/test_plugin.py +283 -0
  105. code_puppy-0.0.314/code_puppy/plugins/claude_code_oauth/utils.py +398 -0
  106. code_puppy-0.0.314/code_puppy/plugins/customizable_commands/register_callbacks.py +169 -0
  107. code_puppy-0.0.314/code_puppy/plugins/example_custom_command/README.md +280 -0
  108. code_puppy-0.0.314/code_puppy/plugins/example_custom_command/register_callbacks.py +51 -0
  109. code_puppy-0.0.314/code_puppy/plugins/file_permission_handler/__init__.py +4 -0
  110. code_puppy-0.0.314/code_puppy/plugins/file_permission_handler/register_callbacks.py +523 -0
  111. code_puppy-0.0.314/code_puppy/plugins/oauth_puppy_html.py +228 -0
  112. code_puppy-0.0.314/code_puppy/plugins/shell_safety/__init__.py +6 -0
  113. code_puppy-0.0.314/code_puppy/plugins/shell_safety/agent_shell_safety.py +186 -0
  114. code_puppy-0.0.314/code_puppy/plugins/shell_safety/command_cache.py +156 -0
  115. code_puppy-0.0.314/code_puppy/plugins/shell_safety/register_callbacks.py +161 -0
  116. code_puppy-0.0.314/code_puppy/prompts/codex_system_prompt.md +310 -0
  117. code_puppy-0.0.314/code_puppy/pydantic_patches.py +131 -0
  118. {code_puppy-0.0.186 → code_puppy-0.0.314}/code_puppy/round_robin_model.py +9 -12
  119. code_puppy-0.0.314/code_puppy/session_storage.py +294 -0
  120. {code_puppy-0.0.186 → code_puppy-0.0.314}/code_puppy/status_display.py +17 -4
  121. {code_puppy-0.0.186 → code_puppy-0.0.314}/code_puppy/summarization_agent.py +51 -13
  122. code_puppy-0.0.314/code_puppy/tools/agent_tools.py +568 -0
  123. code_puppy-0.0.314/code_puppy/tools/browser/__init__.py +0 -0
  124. {code_puppy-0.0.186 → code_puppy-0.0.314}/code_puppy/tools/browser/browser_control.py +13 -17
  125. {code_puppy-0.0.186 → code_puppy-0.0.314}/code_puppy/tools/browser/browser_interactions.py +20 -28
  126. {code_puppy-0.0.186 → code_puppy-0.0.314}/code_puppy/tools/browser/browser_locators.py +27 -29
  127. {code_puppy-0.0.186 → code_puppy-0.0.314}/code_puppy/tools/browser/browser_navigation.py +9 -9
  128. {code_puppy-0.0.186 → code_puppy-0.0.314}/code_puppy/tools/browser/browser_screenshot.py +12 -14
  129. {code_puppy-0.0.186 → code_puppy-0.0.314}/code_puppy/tools/browser/browser_scripts.py +17 -29
  130. {code_puppy-0.0.186 → code_puppy-0.0.314}/code_puppy/tools/browser/browser_workflows.py +44 -27
  131. code_puppy-0.0.314/code_puppy/tools/browser/camoufox_manager.py +235 -0
  132. {code_puppy-0.0.186 → code_puppy-0.0.314}/code_puppy/tools/browser/vqa_agent.py +34 -6
  133. code_puppy-0.0.314/code_puppy/tools/command_runner.py +1206 -0
  134. code_puppy-0.0.314/code_puppy/tools/common.py +1414 -0
  135. {code_puppy-0.0.186 → code_puppy-0.0.314}/code_puppy/tools/file_modifications.py +288 -89
  136. {code_puppy-0.0.186 → code_puppy-0.0.314}/code_puppy/tools/file_operations.py +350 -264
  137. code_puppy-0.0.314/code_puppy/version_checker.py +54 -0
  138. {code_puppy-0.0.186 → code_puppy-0.0.314}/pyproject.toml +30 -17
  139. code_puppy-0.0.186/code_puppy/__init__.py +0 -4
  140. code_puppy-0.0.186/code_puppy/agents/agent_cpp_reviewer.py +0 -65
  141. code_puppy-0.0.186/code_puppy/agents/agent_golang_reviewer.py +0 -62
  142. code_puppy-0.0.186/code_puppy/agents/agent_javascript_reviewer.py +0 -67
  143. code_puppy-0.0.186/code_puppy/agents/agent_qa_expert.py +0 -71
  144. code_puppy-0.0.186/code_puppy/agents/agent_security_auditor.py +0 -71
  145. code_puppy-0.0.186/code_puppy/agents/agent_typescript_reviewer.py +0 -67
  146. code_puppy-0.0.186/code_puppy/agents/base_agent.py +0 -999
  147. code_puppy-0.0.186/code_puppy/command_line/command_handler.py +0 -724
  148. code_puppy-0.0.186/code_puppy/command_line/model_picker_completion.py +0 -120
  149. code_puppy-0.0.186/code_puppy/command_line/prompt_toolkit_completion.py +0 -269
  150. code_puppy-0.0.186/code_puppy/config.py +0 -626
  151. code_puppy-0.0.186/code_puppy/main.py +0 -568
  152. code_puppy-0.0.186/code_puppy/messaging/__init__.py +0 -50
  153. code_puppy-0.0.186/code_puppy/messaging/spinner/textual_spinner.py +0 -101
  154. code_puppy-0.0.186/code_puppy/model_factory.py +0 -351
  155. code_puppy-0.0.186/code_puppy/models.json +0 -71
  156. code_puppy-0.0.186/code_puppy/plugins/__init__.py +0 -32
  157. code_puppy-0.0.186/code_puppy/tools/agent_tools.py +0 -178
  158. code_puppy-0.0.186/code_puppy/tools/browser/camoufox_manager.py +0 -179
  159. code_puppy-0.0.186/code_puppy/tools/command_runner.py +0 -630
  160. code_puppy-0.0.186/code_puppy/tools/common.py +0 -443
  161. code_puppy-0.0.186/code_puppy/tui/__init__.py +0 -10
  162. code_puppy-0.0.186/code_puppy/tui/app.py +0 -956
  163. code_puppy-0.0.186/code_puppy/tui/components/__init__.py +0 -21
  164. code_puppy-0.0.186/code_puppy/tui/components/chat_view.py +0 -551
  165. code_puppy-0.0.186/code_puppy/tui/components/command_history_modal.py +0 -218
  166. code_puppy-0.0.186/code_puppy/tui/components/copy_button.py +0 -139
  167. code_puppy-0.0.186/code_puppy/tui/components/custom_widgets.py +0 -63
  168. code_puppy-0.0.186/code_puppy/tui/components/human_input_modal.py +0 -175
  169. code_puppy-0.0.186/code_puppy/tui/components/input_area.py +0 -167
  170. code_puppy-0.0.186/code_puppy/tui/components/sidebar.py +0 -309
  171. code_puppy-0.0.186/code_puppy/tui/components/status_bar.py +0 -182
  172. code_puppy-0.0.186/code_puppy/tui/messages.py +0 -27
  173. code_puppy-0.0.186/code_puppy/tui/models/__init__.py +0 -8
  174. code_puppy-0.0.186/code_puppy/tui/models/chat_message.py +0 -25
  175. code_puppy-0.0.186/code_puppy/tui/models/command_history.py +0 -89
  176. code_puppy-0.0.186/code_puppy/tui/models/enums.py +0 -24
  177. code_puppy-0.0.186/code_puppy/tui/screens/__init__.py +0 -15
  178. code_puppy-0.0.186/code_puppy/tui/screens/help.py +0 -130
  179. code_puppy-0.0.186/code_puppy/tui/screens/mcp_install_wizard.py +0 -803
  180. code_puppy-0.0.186/code_puppy/tui/screens/settings.py +0 -290
  181. code_puppy-0.0.186/code_puppy/tui/screens/tools.py +0 -74
  182. code_puppy-0.0.186/code_puppy/tui_state.py +0 -55
  183. code_puppy-0.0.186/code_puppy/version_checker.py +0 -35
  184. {code_puppy-0.0.186 → code_puppy-0.0.314}/LICENSE +0 -0
  185. {code_puppy-0.0.186 → code_puppy-0.0.314}/code_puppy/__main__.py +0 -0
  186. {code_puppy-0.0.186 → code_puppy-0.0.314}/code_puppy/agents/__init__.py +0 -0
  187. {code_puppy-0.0.186 → code_puppy-0.0.314}/code_puppy/agents/agent_qa_kitten.py +0 -0
  188. {code_puppy-0.0.186 → code_puppy-0.0.314}/code_puppy/command_line/__init__.py +0 -0
  189. {code_puppy-0.0.186 → code_puppy-0.0.314}/code_puppy/command_line/file_path_completion.py +0 -0
  190. {code_puppy-0.0.186 → code_puppy-0.0.314}/code_puppy/command_line/mcp/__init__.py +0 -0
  191. {code_puppy-0.0.186 → code_puppy-0.0.314}/code_puppy/command_line/mcp/utils.py +0 -0
  192. {code_puppy-0.0.186 → code_puppy-0.0.314}/code_puppy/command_line/utils.py +0 -0
  193. {code_puppy-0.0.186 → code_puppy-0.0.314}/code_puppy/mcp_/__init__.py +0 -0
  194. {code_puppy-0.0.186 → code_puppy-0.0.314}/code_puppy/mcp_/async_lifecycle.py +0 -0
  195. {code_puppy-0.0.186 → code_puppy-0.0.314}/code_puppy/mcp_/circuit_breaker.py +0 -0
  196. {code_puppy-0.0.186 → code_puppy-0.0.314}/code_puppy/mcp_/error_isolation.py +0 -0
  197. {code_puppy-0.0.186 → code_puppy-0.0.314}/code_puppy/mcp_/examples/retry_example.py +0 -0
  198. {code_puppy-0.0.186 → code_puppy-0.0.314}/code_puppy/mcp_/health_monitor.py +0 -0
  199. {code_puppy-0.0.186 → code_puppy-0.0.314}/code_puppy/mcp_/manager.py +0 -0
  200. {code_puppy-0.0.186 → code_puppy-0.0.314}/code_puppy/mcp_/retry_manager.py +0 -0
  201. {code_puppy-0.0.186 → code_puppy-0.0.314}/code_puppy/mcp_/status_tracker.py +0 -0
  202. {code_puppy-0.0.186 → code_puppy-0.0.314}/code_puppy/mcp_/system_tools.py +0 -0
  203. {code_puppy-0.0.186/code_puppy/tools/browser → code_puppy-0.0.314/code_puppy/plugins/customizable_commands}/__init__.py +0 -0
  204. {code_puppy-0.0.186 → code_puppy-0.0.314}/code_puppy/reopenable_async_client.py +0 -0
  205. {code_puppy-0.0.186 → code_puppy-0.0.314}/code_puppy/tools/__init__.py +0 -0
  206. {code_puppy-0.0.186 → code_puppy-0.0.314}/code_puppy/tools/tools_content.py +0 -0
@@ -20,3 +20,7 @@ wheels/
20
20
  dummy_path
21
21
 
22
22
  .idea/
23
+
24
+ .DS_Store
25
+ .env
26
+ .serena/
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-puppy
3
- Version: 0.0.186
3
+ Version: 0.0.314
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
@@ -14,43 +14,68 @@ Classifier: Programming Language :: Python :: 3.11
14
14
  Classifier: Programming Language :: Python :: 3.12
15
15
  Classifier: Programming Language :: Python :: 3.13
16
16
  Classifier: Topic :: Software Development :: Code Generators
17
- Requires-Python: >=3.11
18
- Requires-Dist: bs4>=0.0.2
17
+ Requires-Python: <3.14,>=3.11
19
18
  Requires-Dist: camoufox>=0.4.11
20
- Requires-Dist: fastapi>=0.110.0
21
- Requires-Dist: httpx-limiter>=0.3.0
22
- Requires-Dist: httpx>=0.24.1
19
+ Requires-Dist: dbos>=2.5.0
20
+ Requires-Dist: fastapi>=0.111.0
21
+ Requires-Dist: httpx[http2]>=0.24.1
23
22
  Requires-Dist: json-repair>=0.46.2
24
23
  Requires-Dist: logfire>=0.7.1
25
24
  Requires-Dist: openai>=1.99.1
26
- Requires-Dist: pathspec>=0.11.0
27
25
  Requires-Dist: playwright>=1.40.0
28
- Requires-Dist: prompt-toolkit>=3.0.38
29
- Requires-Dist: pydantic-ai<=0.8
26
+ Requires-Dist: prompt-toolkit>=3.0.52
27
+ Requires-Dist: pydantic-ai==1.25.0
30
28
  Requires-Dist: pydantic>=2.4.0
31
- Requires-Dist: pyjwt>=2.8.0
29
+ Requires-Dist: pyfiglet>=0.8.post1
32
30
  Requires-Dist: pytest-cov>=6.1.1
33
31
  Requires-Dist: python-dotenv>=1.0.0
34
32
  Requires-Dist: rapidfuzz>=3.13.0
35
33
  Requires-Dist: rich>=13.4.2
36
- Requires-Dist: ripgrep>=14.1.0
34
+ Requires-Dist: ripgrep==14.1.0
37
35
  Requires-Dist: ruff>=0.11.11
38
36
  Requires-Dist: tenacity>=8.2.0
39
- Requires-Dist: termcolor>=3.1.0
40
- Requires-Dist: textual-dev>=1.7.0
41
- Requires-Dist: textual>=5.0.0
42
- Requires-Dist: tree-sitter-language-pack>=0.8.0
43
- Requires-Dist: tree-sitter-typescript>=0.23.2
44
- Requires-Dist: uvicorn>=0.29.0
37
+ Requires-Dist: uvicorn>=0.30.0
45
38
  Description-Content-Type: text/markdown
46
39
 
47
- # 🐶 Code Puppy 🐶
48
- ![Build Status](https://img.shields.io/badge/build-passing-brightgreen)
49
- ![Coverage](https://img.shields.io/badge/coverage-95%25-brightgreen)
50
- <a href="https://github.com/mpfaffenberger/code_puppy"><img src="https://img.shields.io/pypi/pyversions/pydantic-ai.svg" alt="versions"></a>
51
- <a href="https://github.com/mpfaffenberger/code_puppy/blob/main/LICENSE"><img src="https://img.shields.io/github/license/pydantic/pydantic-ai.svg?v" alt="license"></a>
40
+ <div align="center">
41
+
42
+ ![Code Puppy Logo](code_puppy.png)
43
+
44
+ **🐶✨The sassy AI code agent that makes IDEs look outdated** ✨🐶
45
+
46
+ [![Version](https://img.shields.io/pypi/v/code-puppy?style=for-the-badge&logo=python&label=Version&color=purple)](https://pypi.org/project/code-puppy/)
47
+ [![Downloads](https://img.shields.io/badge/Downloads-100k%2B-brightgreen?style=for-the-badge&logo=download)](https://pypi.org/project/code-puppy/)
48
+ [![Python](https://img.shields.io/badge/Python-3.11%2B-blue?style=for-the-badge&logo=python&logoColor=white)](https://python.org)
49
+ [![License](https://img.shields.io/badge/License-MIT-green?style=for-the-badge)](LICENSE)
50
+ [![Build Status](https://img.shields.io/badge/Build-Passing-brightgreen?style=for-the-badge&logo=github)](https://github.com/mpfaffenberger/code_puppy/actions)
51
+ [![Coverage](https://img.shields.io/badge/Coverage-95%25-brightgreen?style=for-the-badge)](https://github.com/mpfaffenberger/code_puppy)
52
+ [![Code Style](https://img.shields.io/badge/Code%20Style-Black-black?style=for-the-badge)](https://github.com/psf/black)
53
+ [![Tests](https://img.shields.io/badge/Tests-Passing-success?style=for-the-badge&logo=pytest)](https://github.com/mpfaffenberger/code_puppy/tests)
54
+
55
+ [![OpenAI](https://img.shields.io/badge/OpenAI-GPT--5-orange?style=flat-square&logo=openai)](https://openai.com)
56
+ [![Gemini](https://img.shields.io/badge/Google-Gemini-blue?style=flat-square&logo=google)](https://ai.google.dev/)
57
+ [![Anthropic](https://img.shields.io/badge/Anthropic-Claude-orange?style=flat-square&logo=anthropic)](https://anthropic.com)
58
+ [![Cerebras](https://img.shields.io/badge/Cerebras-GLM%204.6-red?style=flat-square)](https://cerebras.ai)
59
+ [![Z.AI](https://img.shields.io/badge/Z.AI-GLM%204.6-purple?style=flat-square)](https://z.ai/)
60
+ [![Synthetic](https://img.shields.io/badge/Synthetic-MINIMAX_M2-green?style=flat-square)](https://synthetic.new)
61
+
62
+ [![100% Open Source](https://img.shields.io/badge/100%25-Open%20Source-blue?style=for-the-badge)](https://github.com/mpfaffenberger/code_puppy)
63
+ [![Pydantic AI](https://img.shields.io/badge/Pydantic-AI-success?style=for-the-badge)](https://github.com/pydantic/pydantic-ai)
64
+
65
+ [![100% privacy](https://img.shields.io/badge/FULL-Privacy%20commitment-blue?style=for-the-badge)](https://github.com/mpfaffenberger/code_puppy/blob/main/README.md#code-puppy-privacy-commitment)
66
+
67
+ [![GitHub stars](https://img.shields.io/github/stars/mpfaffenberger/code_puppy?style=for-the-badge&logo=github)](https://github.com/mpfaffenberger/code_puppy/stargazers)
68
+ [![GitHub forks](https://img.shields.io/github/forks/mpfaffenberger/code_puppy?style=for-the-badge&logo=github)](https://github.com/mpfaffenberger/code_puppy/network)
69
+
70
+ **[⭐ Star this repo if you hate expensive IDEs! ⭐](#quick-start)**
71
+
72
+ *"Who needs an IDE when you have 1024 angry puppies?"* - Someone, probably.
73
+
74
+ </div>
75
+
76
+ ---
77
+
52
78
 
53
- *"Who needs an IDE?"* - someone, probably.
54
79
 
55
80
  ## Overview
56
81
 
@@ -64,47 +89,145 @@ Description-Content-Type: text/markdown
64
89
 
65
90
  Code Puppy is an AI-powered code generation agent, designed to understand programming tasks, generate high-quality code, and explain its reasoning similar to tools like Windsurf and Cursor.
66
91
 
92
+
67
93
  ## Quick start
68
94
 
69
- `uvx code-puppy -i`
95
+ ```bash
96
+ uvx code-puppy -i
97
+ ````
70
98
 
99
+ ## Installation
71
100
 
72
- ## Features
101
+ ### UV (Recommended)
73
102
 
74
- - **Multi-language support**: Capable of generating code in various programming languages.
75
- - **Interactive CLI**: A command-line interface for interactive use.
76
- - **Detailed explanations**: Provides insights into generated code to understand its logic and structure.
103
+ ```bash
104
+ # Install UV if you don't have it
105
+ curl -LsSf https://astral.sh/uv/install.sh | sh
77
106
 
78
- ## Command Line Animation
107
+ # Set UV to always use managed Python (one-time setup)
108
+ echo 'export UV_MANAGED_PYTHON=1' >> ~/.zshrc # or ~/.bashrc
109
+ source ~/.zshrc # or ~/.bashrc
79
110
 
80
- ![Code Puppy](code_puppy.gif)
111
+ # Install and run code-puppy
112
+ uvx code-puppy -i
113
+ ```
81
114
 
82
- ## Installation
115
+ UV will automatically download the latest compatible Python version (3.11+) if your system doesn't have one.
83
116
 
84
- `pip install code-puppy`
117
+ ### pip (Alternative)
118
+
119
+ ```bash
120
+ pip install code-puppy
121
+ ```
122
+
123
+ *Note: pip installation requires your system Python to be 3.11 or newer.*
124
+
125
+ ### Permanent Python Management
126
+
127
+ To make UV always use managed Python versions (recommended):
85
128
 
86
- ## Usage
87
129
  ```bash
88
- export MODEL_NAME=gpt-5 # or gemini-2.5-flash-preview-05-20 as an example for Google Gemini models
89
- export OPENAI_API_KEY=<your_openai_api_key> # or GEMINI_API_KEY for Google Gemini models
90
- export CEREBRAS_API_KEY=<your_cerebras_api_key> # for Cerebras models
91
- export YOLO_MODE=true # to bypass the safety confirmation prompt when running shell commands
130
+ # Set environment variable permanently
131
+ echo 'export UV_MANAGED_PYTHON=1' >> ~/.zshrc # or ~/.bashrc
132
+ source ~/.zshrc # or ~/.bashrc
92
133
 
93
- # or ...
134
+ # Now all UV commands will prefer managed Python installations
135
+ uvx code-puppy # No need for --managed-python flag anymore
136
+ ```
94
137
 
95
- export AZURE_OPENAI_API_KEY=...
96
- export AZURE_OPENAI_ENDPOINT=...
138
+ ### Verifying Python Version
139
+
140
+ ```bash
141
+ # Check which Python UV will use
142
+ uv python find
97
143
 
98
- code-puppy --interactive
144
+ # Or check the current project's Python
145
+ uv run python --version
99
146
  ```
100
147
 
101
- Run specific tasks or engage in interactive mode:
148
+ ## Usage
149
+
150
+ ### Custom Commands
151
+ Create markdown files in `.claude/commands/`, `.github/prompts/`, or `.agents/commands/` to define custom slash commands. The filename becomes the command name and the content runs as a prompt.
152
+
153
+ ```bash
154
+ # Create a custom command
155
+ echo "# Code Review
156
+
157
+ Please review this code for security issues." > .claude/commands/review.md
158
+
159
+ # Use it in Code Puppy
160
+ /review with focus on authentication
161
+ ```
162
+
163
+ ### Adding Models from models.dev 🆕
164
+
165
+ While there are several models configured right out of the box from providers like Synthetic, Cerebras, OpenAI, Google, and Anthropic, Code Puppy integrates with [models.dev](https://models.dev) to let you browse and add models from **65+ providers** with a single command:
102
166
 
103
167
  ```bash
104
- # Execute a task directly
105
- code-puppy "write me a C++ hello world program in /tmp/main.cpp then compile it and run it"
168
+ /add_model
106
169
  ```
107
170
 
171
+ This opens an interactive TUI where you can:
172
+ - **Browse providers** - See all available AI providers (OpenAI, Anthropic, Groq, Mistral, xAI, Cohere, Perplexity, DeepInfra, and many more)
173
+ - **Preview model details** - View capabilities, pricing, context length, and features
174
+ - **One-click add** - Automatically configures the model with correct endpoints and API keys
175
+
176
+ #### Live API with Offline Fallback
177
+
178
+ The `/add_model` command fetches the latest model data from models.dev in real-time. If the API is unavailable, it falls back to a bundled database:
179
+
180
+ ```
181
+ 📡 Fetched latest models from models.dev # Live API
182
+ 📦 Using bundled models database # Offline fallback
183
+ ```
184
+
185
+ #### Supported Providers
186
+
187
+ Code Puppy integrates with https://models.dev giving you access to 65 providers and >1000 different model offerings.
188
+
189
+ There are **39+ additional providers** that already have OpenAI-compatible APIs configured in models.dev!
190
+
191
+ These providers are automatically configured with correct OpenAI-compatible endpoints, but have **not** been tested thoroughly:
192
+
193
+ | Provider | Endpoint | API Key Env Var |
194
+ |----------|----------|----------------|
195
+ | **xAI** (Grok) | `https://api.x.ai/v1` | `XAI_API_KEY` |
196
+ | **Groq** | `https://api.groq.com/openai/v1` | `GROQ_API_KEY` |
197
+ | **Mistral** | `https://api.mistral.ai/v1` | `MISTRAL_API_KEY` |
198
+ | **Together AI** | `https://api.together.xyz/v1` | `TOGETHER_API_KEY` |
199
+ | **Perplexity** | `https://api.perplexity.ai` | `PERPLEXITY_API_KEY` |
200
+ | **DeepInfra** | `https://api.deepinfra.com/v1/openai` | `DEEPINFRA_API_KEY` |
201
+ | **Cohere** | `https://api.cohere.com/compatibility/v1` | `COHERE_API_KEY` |
202
+ | **AIHubMix** | `https://aihubmix.com/v1` | `AIHUBMIX_API_KEY` |
203
+
204
+ #### Smart Warnings
205
+
206
+ - **⚠️ Unsupported Providers** - Providers like Amazon Bedrock and Google Vertex that require special authentication are clearly marked
207
+ - **⚠️ No Tool Calling** - Models without tool calling support show a big warning since they can't use Code Puppy's file/shell tools
208
+
209
+ ### Durable Execution
210
+
211
+ Code Puppy now supports **[DBOS](https://github.com/dbos-inc/dbos-transact-py)** durable execution.
212
+
213
+ When enabled, every agent is automatically wrapped as a `DBOSAgent`, checkpointing key interactions (including agent inputs, LLM responses, MCP calls, and tool calls) in a database for durability and recovery.
214
+
215
+ You can toggle DBOS via either of these options:
216
+
217
+ - CLI config (persists): `/set enable_dbos true` (or `false` to disable)
218
+
219
+
220
+ Config takes precedence if set; otherwise the environment variable is used.
221
+
222
+ ### Configuration
223
+
224
+ The following environment variables control DBOS behavior:
225
+ - `DBOS_CONDUCTOR_KEY`: If set, Code Puppy connects to the [DBOS Management Console](https://console.dbos.dev/). Make sure you first register an app named `dbos-code-puppy` on the console to generate a Conductor key. Default: `None`.
226
+ - `DBOS_LOG_LEVEL`: Logging verbosity: `CRITICAL`, `ERROR`, `WARNING`, `INFO`, or `DEBUG`. Default: `ERROR`.
227
+ - `DBOS_SYSTEM_DATABASE_URL`: Database URL used by DBOS. Can point to a local SQLite file or a Postgres instance. Example: `postgresql://postgres:dbos@localhost:5432/postgres`. Default: `dbos_store.sqlite` file in the config directory.
228
+ - `DBOS_APP_VERSION`: If set, Code Puppy uses it as the [DBOS application version](https://docs.dbos.dev/architecture#application-and-workflow-versions) and automatically tries to recover pending workflows for this version. Default: Code Puppy version + Unix timestamp in millisecond (disable automatic recovery).
229
+
230
+
108
231
  ## Requirements
109
232
 
110
233
  - Python 3.11+
@@ -114,10 +237,6 @@ code-puppy "write me a C++ hello world program in /tmp/main.cpp then compile it
114
237
  - Anthropic key (for Claude models)
115
238
  - Ollama endpoint available
116
239
 
117
- ## License
118
-
119
- This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
120
-
121
240
  ## Agent Rules
122
241
  We support AGENT.md files for defining coding standards and styles that your code should comply with. These rules can cover various aspects such as formatting, naming conventions, and even design guidelines.
123
242
 
@@ -127,8 +246,6 @@ For examples and more information about agent rules, visit [https://agent.md](ht
127
246
 
128
247
  Use the `/mcp` command to manage MCP (list, start, stop, status, etc.)
129
248
 
130
- In the TUI you can click on MCP settings on the footer and interact with a mini-marketplace.
131
-
132
249
  Watch this video for examples! https://www.youtube.com/watch?v=1t1zEetOqlo
133
250
 
134
251
 
@@ -640,8 +757,28 @@ Consider contributing agent templates for:
640
757
 
641
758
  ---
642
759
 
643
- **Happy Agent Building!** 🚀 Code Puppy now supports both Python and JSON agents, making it easy for anyone to create custom AI coding assistants! 🐶✨
760
+ # Code Puppy Privacy Commitment
761
+
762
+ **Zero-compromise privacy policy. Always.**
763
+
764
+ Unlike other Agentic Coding software, there is no corporate or investor backing for this project, which means **zero pressure to compromise our principles for profit**. This isn't just a nice-to-have feature – it's fundamental to the project's DNA.
765
+
766
+ ### What Code Puppy _absolutely does not_ collect:
767
+ - ❌ **Zero telemetry** – no usage analytics, crash reports, or behavioral tracking
768
+ - ❌ **Zero prompt logging** – your code, conversations, or project details are never stored
769
+ - ❌ **Zero behavioral profiling** – we don't track what you build, how you code, or when you use the tool
770
+ - ❌ **Zero third-party data sharing** – your information is never sold, traded, or given away
771
+
772
+ ### What data flows where:
773
+ - **LLM Provider Communication**: Your prompts are sent directly to whichever LLM provider you've configured (OpenAI, Anthropic, local models, etc.) – this is unavoidable for AI functionality
774
+ - **Complete Local Option**: Run your own VLLM/SGLang/Llama.cpp server locally → **zero data leaves your network**. Configure this with `~/.code_puppy/extra_models.json`
775
+ - **Direct Developer Contact**: All feature requests, bug reports, and discussions happen directly with me – no middleman analytics platforms or customer data harvesting tools
644
776
 
777
+ ### Our privacy-first architecture:
778
+ Code Puppy is designed with privacy-by-design principles. Every feature has been evaluated through a privacy lens, and every integration respects user data sovereignty. When you use Code Puppy, you're not the product – you're just a developer getting things done.
645
779
 
646
- ## Conclusion
647
- By using Code Puppy, you can maintain code quality and adhere to design guidelines with ease.
780
+ **This commitment is enforceable because it's structurally impossible to violate it.** No external pressures, no investor demands, no quarterly earnings targets to hit. Just solid code that respects your privacy.
781
+
782
+ ## License
783
+
784
+ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
@@ -1,10 +1,42 @@
1
- # 🐶 Code Puppy 🐶
2
- ![Build Status](https://img.shields.io/badge/build-passing-brightgreen)
3
- ![Coverage](https://img.shields.io/badge/coverage-95%25-brightgreen)
4
- <a href="https://github.com/mpfaffenberger/code_puppy"><img src="https://img.shields.io/pypi/pyversions/pydantic-ai.svg" alt="versions"></a>
5
- <a href="https://github.com/mpfaffenberger/code_puppy/blob/main/LICENSE"><img src="https://img.shields.io/github/license/pydantic/pydantic-ai.svg?v" alt="license"></a>
1
+ <div align="center">
2
+
3
+ ![Code Puppy Logo](code_puppy.png)
4
+
5
+ **🐶✨The sassy AI code agent that makes IDEs look outdated** ✨🐶
6
+
7
+ [![Version](https://img.shields.io/pypi/v/code-puppy?style=for-the-badge&logo=python&label=Version&color=purple)](https://pypi.org/project/code-puppy/)
8
+ [![Downloads](https://img.shields.io/badge/Downloads-100k%2B-brightgreen?style=for-the-badge&logo=download)](https://pypi.org/project/code-puppy/)
9
+ [![Python](https://img.shields.io/badge/Python-3.11%2B-blue?style=for-the-badge&logo=python&logoColor=white)](https://python.org)
10
+ [![License](https://img.shields.io/badge/License-MIT-green?style=for-the-badge)](LICENSE)
11
+ [![Build Status](https://img.shields.io/badge/Build-Passing-brightgreen?style=for-the-badge&logo=github)](https://github.com/mpfaffenberger/code_puppy/actions)
12
+ [![Coverage](https://img.shields.io/badge/Coverage-95%25-brightgreen?style=for-the-badge)](https://github.com/mpfaffenberger/code_puppy)
13
+ [![Code Style](https://img.shields.io/badge/Code%20Style-Black-black?style=for-the-badge)](https://github.com/psf/black)
14
+ [![Tests](https://img.shields.io/badge/Tests-Passing-success?style=for-the-badge&logo=pytest)](https://github.com/mpfaffenberger/code_puppy/tests)
15
+
16
+ [![OpenAI](https://img.shields.io/badge/OpenAI-GPT--5-orange?style=flat-square&logo=openai)](https://openai.com)
17
+ [![Gemini](https://img.shields.io/badge/Google-Gemini-blue?style=flat-square&logo=google)](https://ai.google.dev/)
18
+ [![Anthropic](https://img.shields.io/badge/Anthropic-Claude-orange?style=flat-square&logo=anthropic)](https://anthropic.com)
19
+ [![Cerebras](https://img.shields.io/badge/Cerebras-GLM%204.6-red?style=flat-square)](https://cerebras.ai)
20
+ [![Z.AI](https://img.shields.io/badge/Z.AI-GLM%204.6-purple?style=flat-square)](https://z.ai/)
21
+ [![Synthetic](https://img.shields.io/badge/Synthetic-MINIMAX_M2-green?style=flat-square)](https://synthetic.new)
22
+
23
+ [![100% Open Source](https://img.shields.io/badge/100%25-Open%20Source-blue?style=for-the-badge)](https://github.com/mpfaffenberger/code_puppy)
24
+ [![Pydantic AI](https://img.shields.io/badge/Pydantic-AI-success?style=for-the-badge)](https://github.com/pydantic/pydantic-ai)
25
+
26
+ [![100% privacy](https://img.shields.io/badge/FULL-Privacy%20commitment-blue?style=for-the-badge)](https://github.com/mpfaffenberger/code_puppy/blob/main/README.md#code-puppy-privacy-commitment)
27
+
28
+ [![GitHub stars](https://img.shields.io/github/stars/mpfaffenberger/code_puppy?style=for-the-badge&logo=github)](https://github.com/mpfaffenberger/code_puppy/stargazers)
29
+ [![GitHub forks](https://img.shields.io/github/forks/mpfaffenberger/code_puppy?style=for-the-badge&logo=github)](https://github.com/mpfaffenberger/code_puppy/network)
30
+
31
+ **[⭐ Star this repo if you hate expensive IDEs! ⭐](#quick-start)**
32
+
33
+ *"Who needs an IDE when you have 1024 angry puppies?"* - Someone, probably.
34
+
35
+ </div>
36
+
37
+ ---
38
+
6
39
 
7
- *"Who needs an IDE?"* - someone, probably.
8
40
 
9
41
  ## Overview
10
42
 
@@ -18,47 +50,145 @@
18
50
 
19
51
  Code Puppy is an AI-powered code generation agent, designed to understand programming tasks, generate high-quality code, and explain its reasoning similar to tools like Windsurf and Cursor.
20
52
 
53
+
21
54
  ## Quick start
22
55
 
23
- `uvx code-puppy -i`
56
+ ```bash
57
+ uvx code-puppy -i
58
+ ````
24
59
 
60
+ ## Installation
25
61
 
26
- ## Features
62
+ ### UV (Recommended)
27
63
 
28
- - **Multi-language support**: Capable of generating code in various programming languages.
29
- - **Interactive CLI**: A command-line interface for interactive use.
30
- - **Detailed explanations**: Provides insights into generated code to understand its logic and structure.
64
+ ```bash
65
+ # Install UV if you don't have it
66
+ curl -LsSf https://astral.sh/uv/install.sh | sh
31
67
 
32
- ## Command Line Animation
68
+ # Set UV to always use managed Python (one-time setup)
69
+ echo 'export UV_MANAGED_PYTHON=1' >> ~/.zshrc # or ~/.bashrc
70
+ source ~/.zshrc # or ~/.bashrc
33
71
 
34
- ![Code Puppy](code_puppy.gif)
72
+ # Install and run code-puppy
73
+ uvx code-puppy -i
74
+ ```
35
75
 
36
- ## Installation
76
+ UV will automatically download the latest compatible Python version (3.11+) if your system doesn't have one.
37
77
 
38
- `pip install code-puppy`
78
+ ### pip (Alternative)
79
+
80
+ ```bash
81
+ pip install code-puppy
82
+ ```
83
+
84
+ *Note: pip installation requires your system Python to be 3.11 or newer.*
85
+
86
+ ### Permanent Python Management
87
+
88
+ To make UV always use managed Python versions (recommended):
39
89
 
40
- ## Usage
41
90
  ```bash
42
- export MODEL_NAME=gpt-5 # or gemini-2.5-flash-preview-05-20 as an example for Google Gemini models
43
- export OPENAI_API_KEY=<your_openai_api_key> # or GEMINI_API_KEY for Google Gemini models
44
- export CEREBRAS_API_KEY=<your_cerebras_api_key> # for Cerebras models
45
- export YOLO_MODE=true # to bypass the safety confirmation prompt when running shell commands
91
+ # Set environment variable permanently
92
+ echo 'export UV_MANAGED_PYTHON=1' >> ~/.zshrc # or ~/.bashrc
93
+ source ~/.zshrc # or ~/.bashrc
46
94
 
47
- # or ...
95
+ # Now all UV commands will prefer managed Python installations
96
+ uvx code-puppy # No need for --managed-python flag anymore
97
+ ```
48
98
 
49
- export AZURE_OPENAI_API_KEY=...
50
- export AZURE_OPENAI_ENDPOINT=...
99
+ ### Verifying Python Version
100
+
101
+ ```bash
102
+ # Check which Python UV will use
103
+ uv python find
51
104
 
52
- code-puppy --interactive
105
+ # Or check the current project's Python
106
+ uv run python --version
53
107
  ```
54
108
 
55
- Run specific tasks or engage in interactive mode:
109
+ ## Usage
110
+
111
+ ### Custom Commands
112
+ Create markdown files in `.claude/commands/`, `.github/prompts/`, or `.agents/commands/` to define custom slash commands. The filename becomes the command name and the content runs as a prompt.
113
+
114
+ ```bash
115
+ # Create a custom command
116
+ echo "# Code Review
117
+
118
+ Please review this code for security issues." > .claude/commands/review.md
119
+
120
+ # Use it in Code Puppy
121
+ /review with focus on authentication
122
+ ```
123
+
124
+ ### Adding Models from models.dev 🆕
125
+
126
+ While there are several models configured right out of the box from providers like Synthetic, Cerebras, OpenAI, Google, and Anthropic, Code Puppy integrates with [models.dev](https://models.dev) to let you browse and add models from **65+ providers** with a single command:
56
127
 
57
128
  ```bash
58
- # Execute a task directly
59
- code-puppy "write me a C++ hello world program in /tmp/main.cpp then compile it and run it"
129
+ /add_model
60
130
  ```
61
131
 
132
+ This opens an interactive TUI where you can:
133
+ - **Browse providers** - See all available AI providers (OpenAI, Anthropic, Groq, Mistral, xAI, Cohere, Perplexity, DeepInfra, and many more)
134
+ - **Preview model details** - View capabilities, pricing, context length, and features
135
+ - **One-click add** - Automatically configures the model with correct endpoints and API keys
136
+
137
+ #### Live API with Offline Fallback
138
+
139
+ The `/add_model` command fetches the latest model data from models.dev in real-time. If the API is unavailable, it falls back to a bundled database:
140
+
141
+ ```
142
+ 📡 Fetched latest models from models.dev # Live API
143
+ 📦 Using bundled models database # Offline fallback
144
+ ```
145
+
146
+ #### Supported Providers
147
+
148
+ Code Puppy integrates with https://models.dev giving you access to 65 providers and >1000 different model offerings.
149
+
150
+ There are **39+ additional providers** that already have OpenAI-compatible APIs configured in models.dev!
151
+
152
+ These providers are automatically configured with correct OpenAI-compatible endpoints, but have **not** been tested thoroughly:
153
+
154
+ | Provider | Endpoint | API Key Env Var |
155
+ |----------|----------|----------------|
156
+ | **xAI** (Grok) | `https://api.x.ai/v1` | `XAI_API_KEY` |
157
+ | **Groq** | `https://api.groq.com/openai/v1` | `GROQ_API_KEY` |
158
+ | **Mistral** | `https://api.mistral.ai/v1` | `MISTRAL_API_KEY` |
159
+ | **Together AI** | `https://api.together.xyz/v1` | `TOGETHER_API_KEY` |
160
+ | **Perplexity** | `https://api.perplexity.ai` | `PERPLEXITY_API_KEY` |
161
+ | **DeepInfra** | `https://api.deepinfra.com/v1/openai` | `DEEPINFRA_API_KEY` |
162
+ | **Cohere** | `https://api.cohere.com/compatibility/v1` | `COHERE_API_KEY` |
163
+ | **AIHubMix** | `https://aihubmix.com/v1` | `AIHUBMIX_API_KEY` |
164
+
165
+ #### Smart Warnings
166
+
167
+ - **⚠️ Unsupported Providers** - Providers like Amazon Bedrock and Google Vertex that require special authentication are clearly marked
168
+ - **⚠️ No Tool Calling** - Models without tool calling support show a big warning since they can't use Code Puppy's file/shell tools
169
+
170
+ ### Durable Execution
171
+
172
+ Code Puppy now supports **[DBOS](https://github.com/dbos-inc/dbos-transact-py)** durable execution.
173
+
174
+ When enabled, every agent is automatically wrapped as a `DBOSAgent`, checkpointing key interactions (including agent inputs, LLM responses, MCP calls, and tool calls) in a database for durability and recovery.
175
+
176
+ You can toggle DBOS via either of these options:
177
+
178
+ - CLI config (persists): `/set enable_dbos true` (or `false` to disable)
179
+
180
+
181
+ Config takes precedence if set; otherwise the environment variable is used.
182
+
183
+ ### Configuration
184
+
185
+ The following environment variables control DBOS behavior:
186
+ - `DBOS_CONDUCTOR_KEY`: If set, Code Puppy connects to the [DBOS Management Console](https://console.dbos.dev/). Make sure you first register an app named `dbos-code-puppy` on the console to generate a Conductor key. Default: `None`.
187
+ - `DBOS_LOG_LEVEL`: Logging verbosity: `CRITICAL`, `ERROR`, `WARNING`, `INFO`, or `DEBUG`. Default: `ERROR`.
188
+ - `DBOS_SYSTEM_DATABASE_URL`: Database URL used by DBOS. Can point to a local SQLite file or a Postgres instance. Example: `postgresql://postgres:dbos@localhost:5432/postgres`. Default: `dbos_store.sqlite` file in the config directory.
189
+ - `DBOS_APP_VERSION`: If set, Code Puppy uses it as the [DBOS application version](https://docs.dbos.dev/architecture#application-and-workflow-versions) and automatically tries to recover pending workflows for this version. Default: Code Puppy version + Unix timestamp in millisecond (disable automatic recovery).
190
+
191
+
62
192
  ## Requirements
63
193
 
64
194
  - Python 3.11+
@@ -68,10 +198,6 @@ code-puppy "write me a C++ hello world program in /tmp/main.cpp then compile it
68
198
  - Anthropic key (for Claude models)
69
199
  - Ollama endpoint available
70
200
 
71
- ## License
72
-
73
- This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
74
-
75
201
  ## Agent Rules
76
202
  We support AGENT.md files for defining coding standards and styles that your code should comply with. These rules can cover various aspects such as formatting, naming conventions, and even design guidelines.
77
203
 
@@ -81,8 +207,6 @@ For examples and more information about agent rules, visit [https://agent.md](ht
81
207
 
82
208
  Use the `/mcp` command to manage MCP (list, start, stop, status, etc.)
83
209
 
84
- In the TUI you can click on MCP settings on the footer and interact with a mini-marketplace.
85
-
86
210
  Watch this video for examples! https://www.youtube.com/watch?v=1t1zEetOqlo
87
211
 
88
212
 
@@ -594,8 +718,28 @@ Consider contributing agent templates for:
594
718
 
595
719
  ---
596
720
 
597
- **Happy Agent Building!** 🚀 Code Puppy now supports both Python and JSON agents, making it easy for anyone to create custom AI coding assistants! 🐶✨
721
+ # Code Puppy Privacy Commitment
722
+
723
+ **Zero-compromise privacy policy. Always.**
724
+
725
+ Unlike other Agentic Coding software, there is no corporate or investor backing for this project, which means **zero pressure to compromise our principles for profit**. This isn't just a nice-to-have feature – it's fundamental to the project's DNA.
726
+
727
+ ### What Code Puppy _absolutely does not_ collect:
728
+ - ❌ **Zero telemetry** – no usage analytics, crash reports, or behavioral tracking
729
+ - ❌ **Zero prompt logging** – your code, conversations, or project details are never stored
730
+ - ❌ **Zero behavioral profiling** – we don't track what you build, how you code, or when you use the tool
731
+ - ❌ **Zero third-party data sharing** – your information is never sold, traded, or given away
732
+
733
+ ### What data flows where:
734
+ - **LLM Provider Communication**: Your prompts are sent directly to whichever LLM provider you've configured (OpenAI, Anthropic, local models, etc.) – this is unavoidable for AI functionality
735
+ - **Complete Local Option**: Run your own VLLM/SGLang/Llama.cpp server locally → **zero data leaves your network**. Configure this with `~/.code_puppy/extra_models.json`
736
+ - **Direct Developer Contact**: All feature requests, bug reports, and discussions happen directly with me – no middleman analytics platforms or customer data harvesting tools
598
737
 
738
+ ### Our privacy-first architecture:
739
+ Code Puppy is designed with privacy-by-design principles. Every feature has been evaluated through a privacy lens, and every integration respects user data sovereignty. When you use Code Puppy, you're not the product – you're just a developer getting things done.
599
740
 
600
- ## Conclusion
601
- By using Code Puppy, you can maintain code quality and adhere to design guidelines with ease.
741
+ **This commitment is enforceable because it's structurally impossible to violate it.** No external pressures, no investor demands, no quarterly earnings targets to hit. Just solid code that respects your privacy.
742
+
743
+ ## License
744
+
745
+ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
@@ -0,0 +1,10 @@
1
+ import importlib.metadata
2
+
3
+ # Biscuit was here! 🐶
4
+ try:
5
+ _detected_version = importlib.metadata.version("code-puppy")
6
+ # Ensure we never end up with None or empty string
7
+ __version__ = _detected_version if _detected_version else "0.0.0-dev"
8
+ except Exception:
9
+ # Fallback for dev environments where metadata might not be available
10
+ __version__ = "0.0.0-dev"