code-puppy 0.0.554__tar.gz → 0.0.556__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 (372) hide show
  1. {code_puppy-0.0.554 → code_puppy-0.0.556}/PKG-INFO +1 -1
  2. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/claude_cache_client.py +6 -5
  3. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/model_utils.py +14 -7
  4. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/agent_skills/discovery.py +9 -0
  5. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/tools/ask_user_question/constants.py +3 -1
  6. code_puppy-0.0.556/code_puppy/tools/ask_user_question/registration.py +157 -0
  7. {code_puppy-0.0.554 → code_puppy-0.0.556}/pyproject.toml +1 -1
  8. code_puppy-0.0.554/code_puppy/tools/ask_user_question/registration.py +0 -78
  9. {code_puppy-0.0.554 → code_puppy-0.0.556}/.gitignore +0 -0
  10. {code_puppy-0.0.554 → code_puppy-0.0.556}/LICENSE +0 -0
  11. {code_puppy-0.0.554 → code_puppy-0.0.556}/README.md +0 -0
  12. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/__init__.py +0 -0
  13. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/__main__.py +0 -0
  14. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/agents/__init__.py +0 -0
  15. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/agents/_builder.py +0 -0
  16. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/agents/_compaction.py +0 -0
  17. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/agents/_diagnostics.py +0 -0
  18. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/agents/_history.py +0 -0
  19. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/agents/_key_listeners.py +0 -0
  20. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/agents/_non_streaming_render.py +0 -0
  21. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/agents/_run_signals.py +0 -0
  22. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/agents/_runtime.py +0 -0
  23. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/agents/_steer_processor.py +0 -0
  24. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/agents/agent_code_puppy.py +0 -0
  25. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/agents/agent_creator_agent.py +0 -0
  26. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/agents/agent_helios.py +0 -0
  27. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/agents/agent_manager.py +0 -0
  28. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/agents/agent_planning.py +0 -0
  29. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/agents/agent_qa_kitten.py +0 -0
  30. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/agents/base_agent.py +0 -0
  31. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/agents/event_stream_handler.py +0 -0
  32. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/agents/json_agent.py +0 -0
  33. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/agents/run_stats.py +0 -0
  34. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/agents/smooth_stream.py +0 -0
  35. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/agents/subagent_stream_handler.py +0 -0
  36. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/callbacks.py +0 -0
  37. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/chatgpt_codex_client.py +0 -0
  38. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/cli_runner.py +0 -0
  39. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/__init__.py +0 -0
  40. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/add_model_menu.py +0 -0
  41. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/agent_menu.py +0 -0
  42. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/attachments.py +0 -0
  43. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/autosave_menu.py +0 -0
  44. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/clipboard.py +0 -0
  45. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/colors_menu.py +0 -0
  46. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/command_handler.py +0 -0
  47. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/command_registry.py +0 -0
  48. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/config_apply.py +0 -0
  49. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/config_commands.py +0 -0
  50. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/core_commands.py +0 -0
  51. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/diff_menu.py +0 -0
  52. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/file_index.py +0 -0
  53. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/file_path_completion.py +0 -0
  54. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/judges_menu.py +0 -0
  55. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/load_context_completion.py +0 -0
  56. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/mcp/__init__.py +0 -0
  57. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/mcp/base.py +0 -0
  58. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/mcp/catalog_server_installer.py +0 -0
  59. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/mcp/custom_server_form.py +0 -0
  60. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/mcp/custom_server_installer.py +0 -0
  61. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/mcp/edit_command.py +0 -0
  62. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/mcp/handler.py +0 -0
  63. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/mcp/help_command.py +0 -0
  64. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/mcp/install_command.py +0 -0
  65. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/mcp/install_menu.py +0 -0
  66. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/mcp/list_command.py +0 -0
  67. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/mcp/logs_command.py +0 -0
  68. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/mcp/remove_command.py +0 -0
  69. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/mcp/restart_command.py +0 -0
  70. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/mcp/search_command.py +0 -0
  71. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/mcp/silence_warning_command.py +0 -0
  72. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/mcp/start_all_command.py +0 -0
  73. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/mcp/start_command.py +0 -0
  74. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/mcp/status_command.py +0 -0
  75. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/mcp/stop_all_command.py +0 -0
  76. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/mcp/stop_command.py +0 -0
  77. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/mcp/utils.py +0 -0
  78. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/mcp/wizard_utils.py +0 -0
  79. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/mcp_binding_menu.py +0 -0
  80. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/mcp_completion.py +0 -0
  81. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/model_picker_completion.py +0 -0
  82. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/model_settings_menu.py +0 -0
  83. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/onboarding_slides.py +0 -0
  84. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/onboarding_wizard.py +0 -0
  85. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/pagination.py +0 -0
  86. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/pin_command_completion.py +0 -0
  87. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/prompt_toolkit_completion.py +0 -0
  88. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/session_commands.py +0 -0
  89. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/set_menu.py +0 -0
  90. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/set_menu_catalog.py +0 -0
  91. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/set_menu_render.py +0 -0
  92. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/set_menu_schema.py +0 -0
  93. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/set_menu_settings.py +0 -0
  94. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/set_menu_shims.py +0 -0
  95. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/set_menu_values.py +0 -0
  96. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/shell_passthrough.py +0 -0
  97. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/skills_completion.py +0 -0
  98. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/uc_menu.py +0 -0
  99. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/utils.py +0 -0
  100. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/wiggum_state.py +0 -0
  101. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/config.py +0 -0
  102. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/error_logging.py +0 -0
  103. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/gemini_code_assist.py +0 -0
  104. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/gemini_model.py +0 -0
  105. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/hook_engine/README.md +0 -0
  106. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/hook_engine/__init__.py +0 -0
  107. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/hook_engine/aliases.py +0 -0
  108. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/hook_engine/engine.py +0 -0
  109. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/hook_engine/executor.py +0 -0
  110. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/hook_engine/matcher.py +0 -0
  111. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/hook_engine/models.py +0 -0
  112. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/hook_engine/registry.py +0 -0
  113. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/hook_engine/validator.py +0 -0
  114. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/http_utils.py +0 -0
  115. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/keymap.py +0 -0
  116. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/list_filtering.py +0 -0
  117. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/main.py +0 -0
  118. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/mcp_/__init__.py +0 -0
  119. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/mcp_/agent_bindings.py +0 -0
  120. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/mcp_/async_lifecycle.py +0 -0
  121. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/mcp_/blocking_startup.py +0 -0
  122. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/mcp_/captured_stdio_server.py +0 -0
  123. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/mcp_/circuit_breaker.py +0 -0
  124. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/mcp_/config_wizard.py +0 -0
  125. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/mcp_/dashboard.py +0 -0
  126. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/mcp_/error_isolation.py +0 -0
  127. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/mcp_/examples/retry_example.py +0 -0
  128. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/mcp_/health_monitor.py +0 -0
  129. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/mcp_/managed_server.py +0 -0
  130. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/mcp_/manager.py +0 -0
  131. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/mcp_/mcp_logs.py +0 -0
  132. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/mcp_/registry.py +0 -0
  133. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/mcp_/retry_manager.py +0 -0
  134. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/mcp_/server_registry_catalog.py +0 -0
  135. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/mcp_/status_tracker.py +0 -0
  136. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/mcp_/system_tools.py +0 -0
  137. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/mcp_prompts/__init__.py +0 -0
  138. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/mcp_prompts/hook_creator.py +0 -0
  139. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/messaging/__init__.py +0 -0
  140. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/messaging/bus.py +0 -0
  141. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/messaging/commands.py +0 -0
  142. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/messaging/markdown_patches.py +0 -0
  143. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/messaging/message_queue.py +0 -0
  144. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/messaging/messages.py +0 -0
  145. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/messaging/pause_controller.py +0 -0
  146. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/messaging/queue_console.py +0 -0
  147. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/messaging/renderers.py +0 -0
  148. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/messaging/rich_renderer.py +0 -0
  149. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/messaging/spinner/__init__.py +0 -0
  150. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/messaging/spinner/console_spinner.py +0 -0
  151. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/messaging/spinner/spinner_base.py +0 -0
  152. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/messaging/subagent_console.py +0 -0
  153. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/model_descriptions.py +0 -0
  154. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/model_factory.py +0 -0
  155. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/model_switching.py +0 -0
  156. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/models.json +0 -0
  157. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/models_dev_api.json +0 -0
  158. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/models_dev_parser.py +0 -0
  159. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/__init__.py +0 -0
  160. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/agent_skills/__init__.py +0 -0
  161. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/agent_skills/config.py +0 -0
  162. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/agent_skills/downloader.py +0 -0
  163. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/agent_skills/enabled_skills.py +0 -0
  164. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/agent_skills/installer.py +0 -0
  165. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/agent_skills/metadata.py +0 -0
  166. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/agent_skills/prompt_builder.py +0 -0
  167. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/agent_skills/register_callbacks.py +0 -0
  168. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/agent_skills/remote_catalog.py +0 -0
  169. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/agent_skills/skill_catalog.py +0 -0
  170. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/agent_skills/skill_commands.py +0 -0
  171. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/agent_skills/skills_install_menu.py +0 -0
  172. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/agent_skills/skills_menu.py +0 -0
  173. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/agent_steering/README.md +0 -0
  174. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/agent_steering/__init__.py +0 -0
  175. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/agent_steering/register_callbacks.py +0 -0
  176. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/agent_steering/steering_prompt.py +0 -0
  177. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/aws_bedrock/__init__.py +0 -0
  178. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/aws_bedrock/config.py +0 -0
  179. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/aws_bedrock/register_callbacks.py +0 -0
  180. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/aws_bedrock/utils.py +0 -0
  181. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/azure_foundry/README.md +0 -0
  182. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/azure_foundry/__init__.py +0 -0
  183. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/azure_foundry/config.py +0 -0
  184. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/azure_foundry/discovery.py +0 -0
  185. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/azure_foundry/register_callbacks.py +0 -0
  186. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/azure_foundry/token.py +0 -0
  187. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/azure_foundry/utils.py +0 -0
  188. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/chatgpt_oauth/__init__.py +0 -0
  189. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/chatgpt_oauth/config.py +0 -0
  190. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/chatgpt_oauth/oauth_flow.py +0 -0
  191. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/chatgpt_oauth/register_callbacks.py +0 -0
  192. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/chatgpt_oauth/test_plugin.py +0 -0
  193. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/chatgpt_oauth/utils.py +0 -0
  194. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/claude_code_hooks/__init__.py +0 -0
  195. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/claude_code_hooks/config.py +0 -0
  196. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/claude_code_hooks/register_callbacks.py +0 -0
  197. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/claude_code_oauth/README.md +0 -0
  198. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/claude_code_oauth/SETUP.md +0 -0
  199. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/claude_code_oauth/__init__.py +0 -0
  200. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/claude_code_oauth/config.py +0 -0
  201. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/claude_code_oauth/fast_mode.py +0 -0
  202. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/claude_code_oauth/prompt_handler.py +0 -0
  203. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/claude_code_oauth/register_callbacks.py +0 -0
  204. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/claude_code_oauth/test_fast_mode.py +0 -0
  205. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/claude_code_oauth/test_plugin.py +0 -0
  206. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/claude_code_oauth/token_refresh_heartbeat.py +0 -0
  207. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/claude_code_oauth/utils.py +0 -0
  208. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/config.py +0 -0
  209. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/context_indicator/__init__.py +0 -0
  210. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/context_indicator/register_callbacks.py +0 -0
  211. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/context_indicator/usage.py +0 -0
  212. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/copilot_auth/__init__.py +0 -0
  213. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/copilot_auth/config.py +0 -0
  214. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/copilot_auth/reasoning_client.py +0 -0
  215. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/copilot_auth/register_callbacks.py +0 -0
  216. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/copilot_auth/utils.py +0 -0
  217. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/customizable_commands/__init__.py +0 -0
  218. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/customizable_commands/register_callbacks.py +0 -0
  219. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/dbos_durable_exec/__init__.py +0 -0
  220. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/dbos_durable_exec/cancel.py +0 -0
  221. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/dbos_durable_exec/commands.py +0 -0
  222. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/dbos_durable_exec/config.py +0 -0
  223. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/dbos_durable_exec/lifecycle.py +0 -0
  224. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/dbos_durable_exec/register_callbacks.py +0 -0
  225. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/dbos_durable_exec/runtime.py +0 -0
  226. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/dbos_durable_exec/workflow_ids.py +0 -0
  227. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/dbos_durable_exec/wrapper.py +0 -0
  228. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/destructive_command_guard/__init__.py +0 -0
  229. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/destructive_command_guard/detector.py +0 -0
  230. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/destructive_command_guard/register_callbacks.py +0 -0
  231. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/emoji_filter/__init__.py +0 -0
  232. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/emoji_filter/config.py +0 -0
  233. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/emoji_filter/register_callbacks.py +0 -0
  234. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/emoji_filter/stripper.py +0 -0
  235. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/example_custom_command/README.md +0 -0
  236. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/example_custom_command/register_callbacks.py +0 -0
  237. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/file_permission_handler/__init__.py +0 -0
  238. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/file_permission_handler/register_callbacks.py +0 -0
  239. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/force_push_guard/__init__.py +0 -0
  240. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/force_push_guard/detector.py +0 -0
  241. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/force_push_guard/register_callbacks.py +0 -0
  242. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/force_push_guard/test_detector.py +0 -0
  243. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/frontend_emitter/__init__.py +0 -0
  244. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/frontend_emitter/emitter.py +0 -0
  245. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/frontend_emitter/register_callbacks.py +0 -0
  246. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/frontend_emitter/session_context.py +0 -0
  247. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/hook_creator/__init__.py +0 -0
  248. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/hook_creator/register_callbacks.py +0 -0
  249. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/hook_manager/__init__.py +0 -0
  250. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/hook_manager/config.py +0 -0
  251. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/hook_manager/hooks_menu.py +0 -0
  252. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/hook_manager/register_callbacks.py +0 -0
  253. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/oauth_puppy_html.py +0 -0
  254. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/obsidian_agent/README.md +0 -0
  255. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/obsidian_agent/__init__.py +0 -0
  256. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/obsidian_agent/agent_obsidian.py +0 -0
  257. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/obsidian_agent/register_callbacks.py +0 -0
  258. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/ollama/__init__.py +0 -0
  259. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/ollama/register_callbacks.py +0 -0
  260. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/ollama_setup/__init__.py +0 -0
  261. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/ollama_setup/completer.py +0 -0
  262. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/ollama_setup/register_callbacks.py +0 -0
  263. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/plugin_list/__init__.py +0 -0
  264. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/plugin_list/plugins_menu.py +0 -0
  265. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/plugin_list/register_callbacks.py +0 -0
  266. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/pop_command/__init__.py +0 -0
  267. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/pop_command/register_callbacks.py +0 -0
  268. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/prompt_newline/__init__.py +0 -0
  269. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/prompt_newline/config.py +0 -0
  270. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/prompt_newline/register_callbacks.py +0 -0
  271. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/prune/__init__.py +0 -0
  272. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/prune/prune_menu.py +0 -0
  273. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/prune/prune_model.py +0 -0
  274. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/prune/prune_render.py +0 -0
  275. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/prune/register_callbacks.py +0 -0
  276. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/puppy_kennel/README.md +0 -0
  277. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/puppy_kennel/__init__.py +0 -0
  278. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/puppy_kennel/commands.py +0 -0
  279. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/puppy_kennel/config.py +0 -0
  280. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/puppy_kennel/kennel.py +0 -0
  281. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/puppy_kennel/packer.py +0 -0
  282. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/puppy_kennel/recorder.py +0 -0
  283. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/puppy_kennel/register_callbacks.py +0 -0
  284. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/puppy_kennel/retriever.py +0 -0
  285. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/puppy_kennel/schema.py +0 -0
  286. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/puppy_kennel/state.py +0 -0
  287. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/puppy_kennel/tools.py +0 -0
  288. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/puppy_kennel/wings.py +0 -0
  289. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/review_pr/__init__.py +0 -0
  290. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/review_pr/register_callbacks.py +0 -0
  291. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/shell_safety/__init__.py +0 -0
  292. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/shell_safety/agent_shell_safety.py +0 -0
  293. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/shell_safety/command_cache.py +0 -0
  294. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/shell_safety/register_callbacks.py +0 -0
  295. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/statusline/__init__.py +0 -0
  296. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/statusline/config.py +0 -0
  297. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/statusline/payload.py +0 -0
  298. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/statusline/prompt_patch.py +0 -0
  299. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/statusline/register_callbacks.py +0 -0
  300. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/statusline/runner.py +0 -0
  301. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/statusline/statusline_command.py +0 -0
  302. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/switch_agent_resume/__init__.py +0 -0
  303. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/switch_agent_resume/register_callbacks.py +0 -0
  304. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/synthetic_status/__init__.py +0 -0
  305. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/synthetic_status/register_callbacks.py +0 -0
  306. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/synthetic_status/status_api.py +0 -0
  307. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/theme/README.md +0 -0
  308. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/theme/__init__.py +0 -0
  309. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/theme/bundled_palettes.py +0 -0
  310. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/theme/content_styles.py +0 -0
  311. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/theme/osc_palette.py +0 -0
  312. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/theme/picker.py +0 -0
  313. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/theme/register_callbacks.py +0 -0
  314. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/theme/rich_themes.py +0 -0
  315. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/theme/themes.py +0 -0
  316. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/token_ratio_learner/__init__.py +0 -0
  317. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/token_ratio_learner/ratios.py +0 -0
  318. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/token_ratio_learner/register_callbacks.py +0 -0
  319. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/universal_constructor/__init__.py +0 -0
  320. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/universal_constructor/models.py +0 -0
  321. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/universal_constructor/register_callbacks.py +0 -0
  322. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/universal_constructor/registry.py +0 -0
  323. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/universal_constructor/sandbox.py +0 -0
  324. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/wide_completion_menu/__init__.py +0 -0
  325. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/wide_completion_menu/register_callbacks.py +0 -0
  326. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/wiggum/__init__.py +0 -0
  327. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/wiggum/judge.py +0 -0
  328. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/wiggum/judge_config.py +0 -0
  329. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/wiggum/register_callbacks.py +0 -0
  330. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/wiggum/state.py +0 -0
  331. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/provider_credentials.py +0 -0
  332. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/provider_identity.py +0 -0
  333. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/pydantic_patches.py +0 -0
  334. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/reopenable_async_client.py +0 -0
  335. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/round_robin_model.py +0 -0
  336. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/session_storage.py +0 -0
  337. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/status_display.py +0 -0
  338. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/summarization_agent.py +0 -0
  339. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/terminal_utils.py +0 -0
  340. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/tools/__init__.py +0 -0
  341. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/tools/agent_tools.py +0 -0
  342. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/tools/ask_user_question/__init__.py +0 -0
  343. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/tools/ask_user_question/demo_tui.py +0 -0
  344. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/tools/ask_user_question/handler.py +0 -0
  345. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/tools/ask_user_question/models.py +0 -0
  346. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/tools/ask_user_question/renderers.py +0 -0
  347. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/tools/ask_user_question/terminal_ui.py +0 -0
  348. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/tools/ask_user_question/theme.py +0 -0
  349. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/tools/ask_user_question/tui_loop.py +0 -0
  350. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/tools/browser/__init__.py +0 -0
  351. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/tools/browser/browser_control.py +0 -0
  352. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/tools/browser/browser_interactions.py +0 -0
  353. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/tools/browser/browser_locators.py +0 -0
  354. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/tools/browser/browser_manager.py +0 -0
  355. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/tools/browser/browser_navigation.py +0 -0
  356. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/tools/browser/browser_screenshot.py +0 -0
  357. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/tools/browser/browser_scripts.py +0 -0
  358. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/tools/browser/browser_workflows.py +0 -0
  359. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/tools/command_runner.py +0 -0
  360. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/tools/common.py +0 -0
  361. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/tools/display.py +0 -0
  362. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/tools/file_modifications.py +0 -0
  363. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/tools/file_operations.py +0 -0
  364. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/tools/image_tools.py +0 -0
  365. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/tools/model_tools.py +0 -0
  366. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/tools/skills_tools.py +0 -0
  367. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/tools/subagent_context.py +0 -0
  368. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/tools/subagent_invocation.py +0 -0
  369. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/tools/tools_content.py +0 -0
  370. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/tools/universal_constructor.py +0 -0
  371. {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/uvx_detection.py +0 -0
  372. {code_puppy-0.0.554 → code_puppy-0.0.556}/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.554
3
+ Version: 0.0.556
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
@@ -42,13 +42,14 @@ CLAUDE_CLI_USER_AGENT = "claude-cli/2.1.2 (external, cli)"
42
42
 
43
43
 
44
44
  def _model_requires_thinking_summary(model_name):
45
- # Anthropic's Opus 4.7 family rejects adaptive-thinking requests unless a
46
- # 'display: summary' field is present alongside 'type: adaptive'. We check
47
- # both naming conventions (opus-4-7 and 4-7-opus).
45
+ # Anthropic's Opus 4.7+ / Fable 5 families reject adaptive-thinking
46
+ # requests unless 'display: summarized' is present alongside
47
+ # 'type: adaptive'. Delegate to model_utils — single source of truth.
48
48
  if not model_name:
49
49
  return False
50
- lower = model_name.lower()
51
- return "opus-4-7" in lower or "4-7-opus" in lower
50
+ from code_puppy.model_utils import should_use_anthropic_thinking_summary
51
+
52
+ return should_use_anthropic_thinking_summary(model_name)
52
53
 
53
54
 
54
55
  def _enforce_thinking_display_summary(payload):
@@ -136,6 +136,8 @@ def supports_adaptive_thinking(
136
136
  "4-8-opus",
137
137
  "sonnet-4-6",
138
138
  "4-6-sonnet",
139
+ "fable-5",
140
+ "5-fable",
139
141
  )
140
142
  return any(tag in c for c in candidates for tag in _ADAPTIVE_TAGS)
141
143
 
@@ -145,7 +147,7 @@ def get_default_extended_thinking(
145
147
  ) -> str:
146
148
  """Return the default extended_thinking mode for an Anthropic model.
147
149
 
148
- Opus 4-6, Opus 4-7, Opus 4-8, and Sonnet 4-6 models default to
150
+ Opus 4-6, Opus 4-7, Opus 4-8, Sonnet 4-6, and Fable 5 models default to
149
151
  ``"adaptive"`` thinking; all other Anthropic models default to ``"enabled"``.
150
152
 
151
153
  Args:
@@ -166,13 +168,18 @@ def should_use_anthropic_thinking_summary(
166
168
  ) -> bool:
167
169
  """Return whether Anthropic adaptive thinking should request summary display.
168
170
 
169
- Anthropic's newer Opus 4.7 and 4.8 models require ``display: \"summarized\"``
170
- alongside ``thinking={"type": "adaptive"}``.
171
+ Anthropic's newer Opus 4.7+, Opus 4.8, and Fable 5 models require
172
+ ``display: \"summarized\"`` alongside ``thinking={"type": "adaptive"}``.
171
173
  """
174
+ _SUMMARY_TAGS = (
175
+ "opus-4-7",
176
+ "4-7-opus",
177
+ "opus-4-8",
178
+ "4-8-opus",
179
+ "fable-5",
180
+ "5-fable",
181
+ )
172
182
  candidates = [model_name.lower()]
173
183
  if actual_model_id:
174
184
  candidates.append(actual_model_id.lower())
175
- return any(
176
- "opus-4-7" in c or "4-7-opus" in c or "opus-4-8" in c or "4-8-opus" in c
177
- for c in candidates
178
- )
185
+ return any(tag in c for c in candidates for tag in _SUMMARY_TAGS)
@@ -235,6 +235,15 @@ def discover_skills(directories: Optional[List[Path]] = None) -> List[SkillInfo]
235
235
  if not skill_dir.is_dir() or skill_dir.name.startswith("."):
236
236
  continue
237
237
 
238
+ # First-discovered skill wins - skip duplicates from later directories
239
+ if skill_dir.name in seen_skill_names:
240
+ logger.debug(
241
+ "Skipping duplicate skill '%s' at %s (already discovered)",
242
+ skill_dir.name,
243
+ skill_dir,
244
+ )
245
+ continue
246
+
238
247
  has_skill_md = is_valid_skill_directory(skill_dir)
239
248
  skill_info = SkillInfo(
240
249
  name=skill_dir.name,
@@ -6,7 +6,9 @@ from typing import Final
6
6
  MAX_QUESTIONS_PER_CALL: Final[int] = 10 # Reasonable limit for a single TUI interaction
7
7
  MIN_OPTIONS_PER_QUESTION: Final[int] = 2
8
8
  MAX_OPTIONS_PER_QUESTION: Final[int] = 6
9
- MAX_HEADER_LENGTH: Final[int] = 60
9
+ MAX_HEADER_LENGTH: Final[int] = (
10
+ 25 # Must fit in left panel (MAX_LEFT_PANEL_WIDTH - padding)
11
+ )
10
12
  MAX_LABEL_LENGTH: Final[int] = 50
11
13
  MAX_DESCRIPTION_LENGTH: Final[int] = 200
12
14
  MAX_QUESTION_LENGTH: Final[int] = 500
@@ -0,0 +1,157 @@
1
+ """Tool registration for ask_user_question."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import json
6
+ from typing import TYPE_CHECKING, Annotated, Any, Dict, List
7
+
8
+ from pydantic import BeforeValidator, Field, WithJsonSchema
9
+ from pydantic_ai import RunContext
10
+
11
+ from .constants import (
12
+ MAX_DESCRIPTION_LENGTH,
13
+ MAX_HEADER_LENGTH,
14
+ MAX_LABEL_LENGTH,
15
+ MAX_OPTIONS_PER_QUESTION,
16
+ MAX_QUESTION_LENGTH,
17
+ MAX_QUESTIONS_PER_CALL,
18
+ MIN_OPTIONS_PER_QUESTION,
19
+ )
20
+ from .handler import ask_user_question as _ask_user_question_impl
21
+ from .models import AskUserQuestionOutput
22
+
23
+ if TYPE_CHECKING:
24
+ from pydantic_ai import Agent
25
+
26
+
27
+ # Inline JSON schemas to avoid $defs/$ref that many LLM providers misinterpret.
28
+ # This matches the approach used by replace_in_file for complex nested types.
29
+ # Include maxLength constraints so LLMs know the limits upfront.
30
+ _OPTION_SCHEMA: Dict[str, Any] = {
31
+ "type": "object",
32
+ "properties": {
33
+ "label": {
34
+ "type": "string",
35
+ "maxLength": MAX_LABEL_LENGTH,
36
+ "description": f"Short option name (1-5 words, max {MAX_LABEL_LENGTH} chars)",
37
+ },
38
+ "description": {
39
+ "type": "string",
40
+ "maxLength": MAX_DESCRIPTION_LENGTH,
41
+ "description": f"Optional explanation (max {MAX_DESCRIPTION_LENGTH} chars)",
42
+ },
43
+ },
44
+ "required": ["label"],
45
+ }
46
+
47
+ _QUESTION_SCHEMA: Dict[str, Any] = {
48
+ "type": "object",
49
+ "properties": {
50
+ "question": {
51
+ "type": "string",
52
+ "maxLength": MAX_QUESTION_LENGTH,
53
+ "description": f"The full question text (max {MAX_QUESTION_LENGTH} chars)",
54
+ },
55
+ "header": {
56
+ "type": "string",
57
+ "maxLength": MAX_HEADER_LENGTH,
58
+ "description": f"Short label for compact display (max {MAX_HEADER_LENGTH} chars, no spaces)",
59
+ },
60
+ "multi_select": {
61
+ "type": "boolean",
62
+ "description": "If true, user can select multiple options (default: false)",
63
+ },
64
+ "options": {
65
+ "type": "array",
66
+ "items": _OPTION_SCHEMA,
67
+ "minItems": MIN_OPTIONS_PER_QUESTION,
68
+ "maxItems": MAX_OPTIONS_PER_QUESTION,
69
+ "description": f"Array of {MIN_OPTIONS_PER_QUESTION}-{MAX_OPTIONS_PER_QUESTION} selectable options",
70
+ },
71
+ },
72
+ "required": ["question", "header", "options"],
73
+ }
74
+
75
+ _QUESTIONS_ARRAY_SCHEMA: Dict[str, Any] = {
76
+ "type": "array",
77
+ "items": _QUESTION_SCHEMA,
78
+ "minItems": 1,
79
+ "maxItems": MAX_QUESTIONS_PER_CALL,
80
+ "description": (
81
+ f"Array of 1-{MAX_QUESTIONS_PER_CALL} question objects. Each question needs: "
82
+ f"'question' (max {MAX_QUESTION_LENGTH} chars), "
83
+ f"'header' (max {MAX_HEADER_LENGTH} chars, no spaces), "
84
+ f"'options' (array of {MIN_OPTIONS_PER_QUESTION}-{MAX_OPTIONS_PER_QUESTION} options with 'label'). "
85
+ "Optional: 'multi_select' (boolean)."
86
+ ),
87
+ }
88
+
89
+
90
+ def _coerce_questions_json_string(v: Any) -> Any:
91
+ """Coerce a JSON-stringified array to a native list before pydantic validates it.
92
+
93
+ LLMs frequently pass the questions array as a JSON string (e.g. ``"[{...}]"``)
94
+ instead of a native list. pydantic-ai validates tool call arguments against
95
+ the function signature before calling the handler — so the coercion must
96
+ happen here, at the registration layer, before pydantic sees the value.
97
+
98
+ If JSON parsing fails, the original value is returned unchanged and pydantic
99
+ produces a clear type error.
100
+ """
101
+ if isinstance(v, str):
102
+ try:
103
+ return json.loads(v)
104
+ except (json.JSONDecodeError, ValueError):
105
+ return v
106
+ return v
107
+
108
+
109
+ # Type alias with explicit JSON schema override so LLMs see the full structure.
110
+ # The BeforeValidator handles JSON-string coercion before validation.
111
+ # The WithJsonSchema tells pydantic to emit our inline schema instead of inferring.
112
+ QuestionsListWithSchema = Annotated[
113
+ List[Dict[str, Any]],
114
+ BeforeValidator(_coerce_questions_json_string),
115
+ WithJsonSchema(_QUESTIONS_ARRAY_SCHEMA),
116
+ Field(
117
+ description=(
118
+ f"Array of 1-{MAX_QUESTIONS_PER_CALL} question objects. Each question needs: "
119
+ f"'question' (max {MAX_QUESTION_LENGTH} chars), "
120
+ f"'header' (max {MAX_HEADER_LENGTH} chars), "
121
+ f"'options' ({MIN_OPTIONS_PER_QUESTION}-{MAX_OPTIONS_PER_QUESTION} options with 'label')."
122
+ )
123
+ ),
124
+ ]
125
+
126
+
127
+ def register_ask_user_question(agent: Agent) -> None:
128
+ """Register the ask_user_question tool with the given agent."""
129
+
130
+ @agent.tool
131
+ def ask_user_question(
132
+ context: RunContext, # noqa: ARG001 - Required by framework
133
+ questions: QuestionsListWithSchema,
134
+ ) -> AskUserQuestionOutput:
135
+ """Ask the user multiple related questions in an interactive TUI."""
136
+ # Keep the external tool schema simple for provider compatibility.
137
+ # The handler performs the real nested validation and normalization.
138
+ # Fire a Claude Code-style notification so plugins can react when the
139
+ # agent is awaiting user input.
140
+ try:
141
+ import asyncio as _asyncio
142
+
143
+ from code_puppy.callbacks import on_notification
144
+
145
+ _coro = on_notification(
146
+ "Agent is waiting for user input",
147
+ level="prompt",
148
+ context={"questions": questions},
149
+ )
150
+ try:
151
+ _asyncio.get_running_loop()
152
+ _asyncio.ensure_future(_coro)
153
+ except RuntimeError:
154
+ _asyncio.run(_coro)
155
+ except Exception:
156
+ pass
157
+ return _ask_user_question_impl(questions)
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "code-puppy"
7
- version = "0.0.554"
7
+ version = "0.0.556"
8
8
  description = "Code generation agent"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11,<3.15"
@@ -1,78 +0,0 @@
1
- """Tool registration for ask_user_question."""
2
-
3
- from __future__ import annotations
4
-
5
- import json
6
- from typing import TYPE_CHECKING, Annotated, Any
7
-
8
- from pydantic import BeforeValidator, Field
9
- from pydantic_ai import RunContext
10
-
11
- from .handler import ask_user_question as _ask_user_question_impl
12
- from .models import AskUserQuestionOutput
13
-
14
- if TYPE_CHECKING:
15
- from pydantic_ai import Agent
16
-
17
-
18
- def _coerce_questions_json_string(v: Any) -> Any:
19
- """Coerce a JSON-stringified array to a native list before pydantic validates it.
20
-
21
- LLMs frequently pass the questions array as a JSON string (e.g. ``"[{...}]"``)
22
- instead of a native list. pydantic-ai validates tool call arguments against
23
- the function signature before calling the handler — so the coercion must
24
- happen here, at the registration layer, before pydantic sees the value.
25
-
26
- If JSON parsing fails, the original value is returned unchanged and pydantic
27
- produces a clear type error.
28
- """
29
- if isinstance(v, str):
30
- try:
31
- return json.loads(v)
32
- except (json.JSONDecodeError, ValueError):
33
- return v
34
- return v
35
-
36
-
37
- def register_ask_user_question(agent: Agent) -> None:
38
- """Register the ask_user_question tool with the given agent."""
39
-
40
- @agent.tool
41
- def ask_user_question(
42
- context: RunContext, # noqa: ARG001 - Required by framework
43
- questions: Annotated[
44
- list[dict[str, Any]],
45
- BeforeValidator(_coerce_questions_json_string),
46
- Field(
47
- description=(
48
- "Array of question objects. Each question should include: "
49
- "'question' (string), 'header' (short string), optional "
50
- "'multi_select' (boolean), and 'options' (array of option "
51
- "objects with 'label' and optional 'description')."
52
- )
53
- ),
54
- ],
55
- ) -> AskUserQuestionOutput:
56
- """Ask the user multiple related questions in an interactive TUI."""
57
- # Keep the external tool schema simple for provider compatibility.
58
- # The handler performs the real nested validation and normalization.
59
- # Fire a Claude Code-style notification so plugins can react when the
60
- # agent is awaiting user input.
61
- try:
62
- import asyncio as _asyncio
63
-
64
- from code_puppy.callbacks import on_notification
65
-
66
- _coro = on_notification(
67
- "Agent is waiting for user input",
68
- level="prompt",
69
- context={"questions": questions},
70
- )
71
- try:
72
- _asyncio.get_running_loop()
73
- _asyncio.ensure_future(_coro)
74
- except RuntimeError:
75
- _asyncio.run(_coro)
76
- except Exception:
77
- pass
78
- return _ask_user_question_impl(questions)
File without changes
File without changes
File without changes