code-puppy 0.0.362__tar.gz → 0.0.363__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 (214) hide show
  1. {code_puppy-0.0.362 → code_puppy-0.0.363}/PKG-INFO +1 -1
  2. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/command_line/agent_menu.py +49 -17
  3. {code_puppy-0.0.362 → code_puppy-0.0.363}/pyproject.toml +1 -1
  4. {code_puppy-0.0.362 → code_puppy-0.0.363}/.gitignore +0 -0
  5. {code_puppy-0.0.362 → code_puppy-0.0.363}/LICENSE +0 -0
  6. {code_puppy-0.0.362 → code_puppy-0.0.363}/README.md +0 -0
  7. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/__init__.py +0 -0
  8. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/__main__.py +0 -0
  9. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/agents/__init__.py +0 -0
  10. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/agents/agent_c_reviewer.py +0 -0
  11. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/agents/agent_code_puppy.py +0 -0
  12. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/agents/agent_code_reviewer.py +0 -0
  13. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/agents/agent_cpp_reviewer.py +0 -0
  14. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/agents/agent_creator_agent.py +0 -0
  15. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/agents/agent_golang_reviewer.py +0 -0
  16. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/agents/agent_javascript_reviewer.py +0 -0
  17. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/agents/agent_manager.py +0 -0
  18. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/agents/agent_pack_leader.py +0 -0
  19. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/agents/agent_planning.py +0 -0
  20. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/agents/agent_python_programmer.py +0 -0
  21. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/agents/agent_python_reviewer.py +0 -0
  22. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/agents/agent_qa_expert.py +0 -0
  23. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/agents/agent_qa_kitten.py +0 -0
  24. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/agents/agent_security_auditor.py +0 -0
  25. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/agents/agent_terminal_qa.py +0 -0
  26. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/agents/agent_typescript_reviewer.py +0 -0
  27. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/agents/base_agent.py +0 -0
  28. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/agents/event_stream_handler.py +0 -0
  29. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/agents/json_agent.py +0 -0
  30. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/agents/pack/__init__.py +0 -0
  31. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/agents/pack/bloodhound.py +0 -0
  32. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/agents/pack/husky.py +0 -0
  33. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/agents/pack/retriever.py +0 -0
  34. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/agents/pack/shepherd.py +0 -0
  35. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/agents/pack/terrier.py +0 -0
  36. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/agents/pack/watchdog.py +0 -0
  37. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/agents/prompt_reviewer.py +0 -0
  38. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/agents/subagent_stream_handler.py +0 -0
  39. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/api/__init__.py +0 -0
  40. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/api/app.py +0 -0
  41. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/api/main.py +0 -0
  42. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/api/pty_manager.py +0 -0
  43. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/api/routers/__init__.py +0 -0
  44. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/api/routers/agents.py +0 -0
  45. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/api/routers/commands.py +0 -0
  46. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/api/routers/config.py +0 -0
  47. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/api/routers/sessions.py +0 -0
  48. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/api/templates/terminal.html +0 -0
  49. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/api/websocket.py +0 -0
  50. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/callbacks.py +0 -0
  51. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/chatgpt_codex_client.py +0 -0
  52. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/claude_cache_client.py +0 -0
  53. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/cli_runner.py +0 -0
  54. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/command_line/__init__.py +0 -0
  55. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/command_line/add_model_menu.py +0 -0
  56. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/command_line/attachments.py +0 -0
  57. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/command_line/autosave_menu.py +0 -0
  58. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/command_line/clipboard.py +0 -0
  59. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/command_line/colors_menu.py +0 -0
  60. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/command_line/command_handler.py +0 -0
  61. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/command_line/command_registry.py +0 -0
  62. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/command_line/config_commands.py +0 -0
  63. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/command_line/core_commands.py +0 -0
  64. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/command_line/diff_menu.py +0 -0
  65. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/command_line/file_path_completion.py +0 -0
  66. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/command_line/load_context_completion.py +0 -0
  67. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/command_line/mcp/__init__.py +0 -0
  68. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/command_line/mcp/base.py +0 -0
  69. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/command_line/mcp/catalog_server_installer.py +0 -0
  70. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/command_line/mcp/custom_server_form.py +0 -0
  71. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/command_line/mcp/custom_server_installer.py +0 -0
  72. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/command_line/mcp/edit_command.py +0 -0
  73. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/command_line/mcp/handler.py +0 -0
  74. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/command_line/mcp/help_command.py +0 -0
  75. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/command_line/mcp/install_command.py +0 -0
  76. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/command_line/mcp/install_menu.py +0 -0
  77. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/command_line/mcp/list_command.py +0 -0
  78. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/command_line/mcp/logs_command.py +0 -0
  79. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/command_line/mcp/remove_command.py +0 -0
  80. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/command_line/mcp/restart_command.py +0 -0
  81. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/command_line/mcp/search_command.py +0 -0
  82. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/command_line/mcp/start_all_command.py +0 -0
  83. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/command_line/mcp/start_command.py +0 -0
  84. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/command_line/mcp/status_command.py +0 -0
  85. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/command_line/mcp/stop_all_command.py +0 -0
  86. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/command_line/mcp/stop_command.py +0 -0
  87. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/command_line/mcp/test_command.py +0 -0
  88. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/command_line/mcp/utils.py +0 -0
  89. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/command_line/mcp/wizard_utils.py +0 -0
  90. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/command_line/mcp_completion.py +0 -0
  91. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/command_line/model_picker_completion.py +0 -0
  92. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/command_line/model_settings_menu.py +0 -0
  93. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/command_line/motd.py +0 -0
  94. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/command_line/onboarding_slides.py +0 -0
  95. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/command_line/onboarding_wizard.py +0 -0
  96. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/command_line/pin_command_completion.py +0 -0
  97. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/command_line/prompt_toolkit_completion.py +0 -0
  98. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/command_line/session_commands.py +0 -0
  99. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/command_line/utils.py +0 -0
  100. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/config.py +0 -0
  101. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/error_logging.py +0 -0
  102. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/gemini_code_assist.py +0 -0
  103. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/http_utils.py +0 -0
  104. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/keymap.py +0 -0
  105. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/main.py +0 -0
  106. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/mcp_/__init__.py +0 -0
  107. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/mcp_/async_lifecycle.py +0 -0
  108. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/mcp_/blocking_startup.py +0 -0
  109. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/mcp_/captured_stdio_server.py +0 -0
  110. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/mcp_/circuit_breaker.py +0 -0
  111. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/mcp_/config_wizard.py +0 -0
  112. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/mcp_/dashboard.py +0 -0
  113. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/mcp_/error_isolation.py +0 -0
  114. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/mcp_/examples/retry_example.py +0 -0
  115. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/mcp_/health_monitor.py +0 -0
  116. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/mcp_/managed_server.py +0 -0
  117. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/mcp_/manager.py +0 -0
  118. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/mcp_/mcp_logs.py +0 -0
  119. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/mcp_/registry.py +0 -0
  120. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/mcp_/retry_manager.py +0 -0
  121. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/mcp_/server_registry_catalog.py +0 -0
  122. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/mcp_/status_tracker.py +0 -0
  123. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/mcp_/system_tools.py +0 -0
  124. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/messaging/__init__.py +0 -0
  125. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/messaging/bus.py +0 -0
  126. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/messaging/commands.py +0 -0
  127. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/messaging/markdown_patches.py +0 -0
  128. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/messaging/message_queue.py +0 -0
  129. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/messaging/messages.py +0 -0
  130. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/messaging/queue_console.py +0 -0
  131. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/messaging/renderers.py +0 -0
  132. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/messaging/rich_renderer.py +0 -0
  133. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/messaging/spinner/__init__.py +0 -0
  134. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/messaging/spinner/console_spinner.py +0 -0
  135. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/messaging/spinner/spinner_base.py +0 -0
  136. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/messaging/subagent_console.py +0 -0
  137. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/model_factory.py +0 -0
  138. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/model_utils.py +0 -0
  139. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/models.json +0 -0
  140. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/models_dev_api.json +0 -0
  141. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/models_dev_parser.py +0 -0
  142. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/plugins/__init__.py +0 -0
  143. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/plugins/antigravity_oauth/__init__.py +0 -0
  144. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/plugins/antigravity_oauth/accounts.py +0 -0
  145. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/plugins/antigravity_oauth/antigravity_model.py +0 -0
  146. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/plugins/antigravity_oauth/config.py +0 -0
  147. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/plugins/antigravity_oauth/constants.py +0 -0
  148. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/plugins/antigravity_oauth/oauth.py +0 -0
  149. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/plugins/antigravity_oauth/register_callbacks.py +0 -0
  150. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/plugins/antigravity_oauth/storage.py +0 -0
  151. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/plugins/antigravity_oauth/test_plugin.py +0 -0
  152. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/plugins/antigravity_oauth/token.py +0 -0
  153. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/plugins/antigravity_oauth/transport.py +0 -0
  154. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/plugins/antigravity_oauth/utils.py +0 -0
  155. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/plugins/chatgpt_oauth/__init__.py +0 -0
  156. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/plugins/chatgpt_oauth/config.py +0 -0
  157. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/plugins/chatgpt_oauth/oauth_flow.py +0 -0
  158. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/plugins/chatgpt_oauth/register_callbacks.py +0 -0
  159. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/plugins/chatgpt_oauth/test_plugin.py +0 -0
  160. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/plugins/chatgpt_oauth/utils.py +0 -0
  161. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/plugins/claude_code_oauth/README.md +0 -0
  162. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/plugins/claude_code_oauth/SETUP.md +0 -0
  163. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/plugins/claude_code_oauth/__init__.py +0 -0
  164. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/plugins/claude_code_oauth/config.py +0 -0
  165. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/plugins/claude_code_oauth/register_callbacks.py +0 -0
  166. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/plugins/claude_code_oauth/test_plugin.py +0 -0
  167. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/plugins/claude_code_oauth/utils.py +0 -0
  168. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/plugins/customizable_commands/__init__.py +0 -0
  169. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/plugins/customizable_commands/register_callbacks.py +0 -0
  170. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/plugins/example_custom_command/README.md +0 -0
  171. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/plugins/example_custom_command/register_callbacks.py +0 -0
  172. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/plugins/file_permission_handler/__init__.py +0 -0
  173. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/plugins/file_permission_handler/register_callbacks.py +0 -0
  174. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/plugins/frontend_emitter/__init__.py +0 -0
  175. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/plugins/frontend_emitter/emitter.py +0 -0
  176. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/plugins/frontend_emitter/register_callbacks.py +0 -0
  177. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/plugins/oauth_puppy_html.py +0 -0
  178. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/plugins/shell_safety/__init__.py +0 -0
  179. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/plugins/shell_safety/agent_shell_safety.py +0 -0
  180. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/plugins/shell_safety/command_cache.py +0 -0
  181. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/plugins/shell_safety/register_callbacks.py +0 -0
  182. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/prompts/antigravity_system_prompt.md +0 -0
  183. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/prompts/codex_system_prompt.md +0 -0
  184. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/pydantic_patches.py +0 -0
  185. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/reopenable_async_client.py +0 -0
  186. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/round_robin_model.py +0 -0
  187. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/session_storage.py +0 -0
  188. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/status_display.py +0 -0
  189. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/summarization_agent.py +0 -0
  190. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/terminal_utils.py +0 -0
  191. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/tools/__init__.py +0 -0
  192. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/tools/agent_tools.py +0 -0
  193. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/tools/browser/__init__.py +0 -0
  194. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/tools/browser/browser_control.py +0 -0
  195. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/tools/browser/browser_interactions.py +0 -0
  196. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/tools/browser/browser_locators.py +0 -0
  197. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/tools/browser/browser_navigation.py +0 -0
  198. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/tools/browser/browser_screenshot.py +0 -0
  199. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/tools/browser/browser_scripts.py +0 -0
  200. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/tools/browser/browser_workflows.py +0 -0
  201. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/tools/browser/camoufox_manager.py +0 -0
  202. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/tools/browser/chromium_terminal_manager.py +0 -0
  203. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/tools/browser/terminal_command_tools.py +0 -0
  204. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/tools/browser/terminal_screenshot_tools.py +0 -0
  205. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/tools/browser/terminal_tools.py +0 -0
  206. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/tools/command_runner.py +0 -0
  207. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/tools/common.py +0 -0
  208. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/tools/display.py +0 -0
  209. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/tools/file_modifications.py +0 -0
  210. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/tools/file_operations.py +0 -0
  211. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/tools/subagent_context.py +0 -0
  212. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/tools/tools_content.py +0 -0
  213. {code_puppy-0.0.362 → code_puppy-0.0.363}/code_puppy/uvx_detection.py +0 -0
  214. {code_puppy-0.0.362 → code_puppy-0.0.363}/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.362
3
+ Version: 0.0.363
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
@@ -6,6 +6,7 @@ with live preview of agent details.
6
6
 
7
7
  import sys
8
8
  import time
9
+ import unicodedata
9
10
  from typing import List, Optional, Tuple
10
11
 
11
12
  from prompt_toolkit.application import Application
@@ -24,6 +25,30 @@ from code_puppy.tools.command_runner import set_awaiting_user_input
24
25
  PAGE_SIZE = 10 # Agents per page
25
26
 
26
27
 
28
+ def _sanitize_display_text(text: str) -> str:
29
+ """Remove or replace characters that cause terminal rendering issues.
30
+
31
+ Args:
32
+ text: Text that may contain emojis or wide characters
33
+
34
+ Returns:
35
+ Sanitized text safe for prompt_toolkit rendering
36
+ """
37
+ # Keep only characters that render cleanly in terminals
38
+ result = []
39
+ for char in text:
40
+ # Get unicode category
41
+ cat = unicodedata.category(char)
42
+ # Keep letters, numbers, punctuation, spaces, and common symbols
43
+ # Skip "So" (Symbol, other - includes most emojis) that cause issues
44
+ if cat != "So" and cat != "Cn": # Cn = not assigned
45
+ result.append(char)
46
+ # Optionally, you could replace emojis with a placeholder:
47
+ # else:
48
+ # result.append("*")
49
+ return "".join(result).strip()
50
+
51
+
27
52
  def _get_agent_entries() -> List[Tuple[str, str, str]]:
28
53
  """Get all agents with their display names and descriptions.
29
54
 
@@ -65,7 +90,7 @@ def _render_menu_panel(
65
90
  start_idx = page * PAGE_SIZE
66
91
  end_idx = min(start_idx + PAGE_SIZE, len(entries))
67
92
 
68
- lines.append(("bold", " Agents"))
93
+ lines.append(("bold", "Agents"))
69
94
  lines.append(("fg:ansibrightblack", f" (Page {page + 1}/{total_pages})"))
70
95
  lines.append(("", "\n\n"))
71
96
 
@@ -78,14 +103,17 @@ def _render_menu_panel(
78
103
  name, display_name, _ = entries[i]
79
104
  is_selected = i == selected_idx
80
105
  is_current = name == current_agent_name
106
+
107
+ # Sanitize display name to avoid emoji rendering issues
108
+ safe_display_name = _sanitize_display_text(display_name)
81
109
 
82
110
  # Build the line
83
111
  if is_selected:
84
- lines.append(("fg:ansigreen", " ▶ "))
85
- lines.append(("fg:ansigreen bold", display_name))
112
+ lines.append(("fg:ansigreen", "▶ "))
113
+ lines.append(("fg:ansigreen bold", safe_display_name))
86
114
  else:
87
- lines.append(("", " "))
88
- lines.append(("", display_name))
115
+ lines.append(("", " "))
116
+ lines.append(("", safe_display_name))
89
117
 
90
118
  # Add current marker
91
119
  if is_current:
@@ -132,35 +160,39 @@ def _render_preview_panel(
132
160
 
133
161
  name, display_name, description = entry
134
162
  is_current = name == current_agent_name
163
+
164
+ # Sanitize text to avoid emoji rendering issues
165
+ safe_display_name = _sanitize_display_text(display_name)
166
+ safe_description = _sanitize_display_text(description)
135
167
 
136
168
  # Agent name (identifier)
137
- lines.append(("bold", " Name: "))
169
+ lines.append(("bold", "Name: "))
138
170
  lines.append(("", name))
139
171
  lines.append(("", "\n\n"))
140
172
 
141
173
  # Display name
142
- lines.append(("bold", " Display Name: "))
143
- lines.append(("fg:ansicyan", display_name))
174
+ lines.append(("bold", "Display Name: "))
175
+ lines.append(("fg:ansicyan", safe_display_name))
144
176
  lines.append(("", "\n\n"))
145
177
 
146
178
  # Description
147
- lines.append(("bold", " Description:"))
179
+ lines.append(("bold", "Description:"))
148
180
  lines.append(("", "\n"))
149
181
 
150
182
  # Wrap description to fit panel
151
- desc_lines = description.split("\n")
183
+ desc_lines = safe_description.split("\n")
152
184
  for desc_line in desc_lines:
153
185
  # Word wrap long lines
154
186
  words = desc_line.split()
155
- current_line = " "
187
+ current_line = ""
156
188
  for word in words:
157
- if len(current_line) + len(word) + 1 > 60:
189
+ if len(current_line) + len(word) + 1 > 55:
158
190
  lines.append(("fg:ansibrightblack", current_line))
159
191
  lines.append(("", "\n"))
160
- current_line = " " + word
192
+ current_line = word
161
193
  else:
162
- if current_line == " ":
163
- current_line += word
194
+ if current_line == "":
195
+ current_line = word
164
196
  else:
165
197
  current_line += " " + word
166
198
  if current_line.strip():
@@ -222,10 +254,10 @@ async def interactive_agent_picker() -> Optional[str]:
222
254
  )
223
255
 
224
256
  menu_window = Window(
225
- content=menu_control, wrap_lines=True, width=Dimension(weight=35)
257
+ content=menu_control, wrap_lines=False, width=Dimension(weight=35)
226
258
  )
227
259
  preview_window = Window(
228
- content=preview_control, wrap_lines=True, width=Dimension(weight=65)
260
+ content=preview_control, wrap_lines=False, width=Dimension(weight=65)
229
261
  )
230
262
 
231
263
  menu_frame = Frame(menu_window, width=Dimension(weight=35), title="Agents")
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "code-puppy"
7
- version = "0.0.362"
7
+ version = "0.0.363"
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