code-puppy 0.0.550__tar.gz → 0.0.552__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.550 → code_puppy-0.0.552}/PKG-INFO +1 -1
  2. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/agents/_builder.py +72 -3
  3. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/callbacks.py +66 -3
  4. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/config.py +31 -0
  5. code_puppy-0.0.552/code_puppy/plugins/__init__.py +475 -0
  6. code_puppy-0.0.552/code_puppy/plugins/config.py +65 -0
  7. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/example_custom_command/README.md +41 -0
  8. code_puppy-0.0.552/code_puppy/plugins/plugin_list/__init__.py +0 -0
  9. code_puppy-0.0.552/code_puppy/plugins/plugin_list/plugins_menu.py +313 -0
  10. code_puppy-0.0.552/code_puppy/plugins/plugin_list/register_callbacks.py +186 -0
  11. {code_puppy-0.0.550 → code_puppy-0.0.552}/pyproject.toml +1 -1
  12. code_puppy-0.0.550/code_puppy/plugins/__init__.py +0 -186
  13. {code_puppy-0.0.550 → code_puppy-0.0.552}/.gitignore +0 -0
  14. {code_puppy-0.0.550 → code_puppy-0.0.552}/LICENSE +0 -0
  15. {code_puppy-0.0.550 → code_puppy-0.0.552}/README.md +0 -0
  16. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/__init__.py +0 -0
  17. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/__main__.py +0 -0
  18. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/agents/__init__.py +0 -0
  19. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/agents/_compaction.py +0 -0
  20. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/agents/_diagnostics.py +0 -0
  21. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/agents/_history.py +0 -0
  22. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/agents/_key_listeners.py +0 -0
  23. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/agents/_non_streaming_render.py +0 -0
  24. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/agents/_run_signals.py +0 -0
  25. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/agents/_runtime.py +0 -0
  26. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/agents/_steer_processor.py +0 -0
  27. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/agents/agent_code_puppy.py +0 -0
  28. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/agents/agent_creator_agent.py +0 -0
  29. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/agents/agent_helios.py +0 -0
  30. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/agents/agent_manager.py +0 -0
  31. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/agents/agent_planning.py +0 -0
  32. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/agents/agent_qa_kitten.py +0 -0
  33. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/agents/base_agent.py +0 -0
  34. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/agents/event_stream_handler.py +0 -0
  35. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/agents/json_agent.py +0 -0
  36. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/agents/run_stats.py +0 -0
  37. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/agents/smooth_stream.py +0 -0
  38. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/agents/subagent_stream_handler.py +0 -0
  39. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/chatgpt_codex_client.py +0 -0
  40. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/claude_cache_client.py +0 -0
  41. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/cli_runner.py +0 -0
  42. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/__init__.py +0 -0
  43. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/add_model_menu.py +0 -0
  44. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/agent_menu.py +0 -0
  45. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/attachments.py +0 -0
  46. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/autosave_menu.py +0 -0
  47. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/clipboard.py +0 -0
  48. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/colors_menu.py +0 -0
  49. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/command_handler.py +0 -0
  50. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/command_registry.py +0 -0
  51. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/config_apply.py +0 -0
  52. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/config_commands.py +0 -0
  53. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/core_commands.py +0 -0
  54. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/diff_menu.py +0 -0
  55. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/file_index.py +0 -0
  56. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/file_path_completion.py +0 -0
  57. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/judges_menu.py +0 -0
  58. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/load_context_completion.py +0 -0
  59. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/mcp/__init__.py +0 -0
  60. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/mcp/base.py +0 -0
  61. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/mcp/catalog_server_installer.py +0 -0
  62. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/mcp/custom_server_form.py +0 -0
  63. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/mcp/custom_server_installer.py +0 -0
  64. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/mcp/edit_command.py +0 -0
  65. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/mcp/handler.py +0 -0
  66. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/mcp/help_command.py +0 -0
  67. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/mcp/install_command.py +0 -0
  68. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/mcp/install_menu.py +0 -0
  69. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/mcp/list_command.py +0 -0
  70. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/mcp/logs_command.py +0 -0
  71. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/mcp/remove_command.py +0 -0
  72. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/mcp/restart_command.py +0 -0
  73. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/mcp/search_command.py +0 -0
  74. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/mcp/silence_warning_command.py +0 -0
  75. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/mcp/start_all_command.py +0 -0
  76. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/mcp/start_command.py +0 -0
  77. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/mcp/status_command.py +0 -0
  78. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/mcp/stop_all_command.py +0 -0
  79. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/mcp/stop_command.py +0 -0
  80. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/mcp/utils.py +0 -0
  81. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/mcp/wizard_utils.py +0 -0
  82. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/mcp_binding_menu.py +0 -0
  83. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/mcp_completion.py +0 -0
  84. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/model_picker_completion.py +0 -0
  85. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/model_settings_menu.py +0 -0
  86. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/onboarding_slides.py +0 -0
  87. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/onboarding_wizard.py +0 -0
  88. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/pagination.py +0 -0
  89. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/pin_command_completion.py +0 -0
  90. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/prompt_toolkit_completion.py +0 -0
  91. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/session_commands.py +0 -0
  92. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/set_menu.py +0 -0
  93. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/set_menu_catalog.py +0 -0
  94. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/set_menu_render.py +0 -0
  95. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/set_menu_schema.py +0 -0
  96. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/set_menu_settings.py +0 -0
  97. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/set_menu_shims.py +0 -0
  98. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/set_menu_values.py +0 -0
  99. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/shell_passthrough.py +0 -0
  100. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/skills_completion.py +0 -0
  101. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/uc_menu.py +0 -0
  102. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/utils.py +0 -0
  103. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/wiggum_state.py +0 -0
  104. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/error_logging.py +0 -0
  105. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/gemini_code_assist.py +0 -0
  106. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/gemini_model.py +0 -0
  107. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/hook_engine/README.md +0 -0
  108. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/hook_engine/__init__.py +0 -0
  109. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/hook_engine/aliases.py +0 -0
  110. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/hook_engine/engine.py +0 -0
  111. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/hook_engine/executor.py +0 -0
  112. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/hook_engine/matcher.py +0 -0
  113. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/hook_engine/models.py +0 -0
  114. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/hook_engine/registry.py +0 -0
  115. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/hook_engine/validator.py +0 -0
  116. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/http_utils.py +0 -0
  117. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/keymap.py +0 -0
  118. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/list_filtering.py +0 -0
  119. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/main.py +0 -0
  120. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/mcp_/__init__.py +0 -0
  121. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/mcp_/agent_bindings.py +0 -0
  122. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/mcp_/async_lifecycle.py +0 -0
  123. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/mcp_/blocking_startup.py +0 -0
  124. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/mcp_/captured_stdio_server.py +0 -0
  125. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/mcp_/circuit_breaker.py +0 -0
  126. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/mcp_/config_wizard.py +0 -0
  127. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/mcp_/dashboard.py +0 -0
  128. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/mcp_/error_isolation.py +0 -0
  129. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/mcp_/examples/retry_example.py +0 -0
  130. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/mcp_/health_monitor.py +0 -0
  131. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/mcp_/managed_server.py +0 -0
  132. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/mcp_/manager.py +0 -0
  133. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/mcp_/mcp_logs.py +0 -0
  134. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/mcp_/registry.py +0 -0
  135. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/mcp_/retry_manager.py +0 -0
  136. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/mcp_/server_registry_catalog.py +0 -0
  137. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/mcp_/status_tracker.py +0 -0
  138. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/mcp_/system_tools.py +0 -0
  139. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/mcp_prompts/__init__.py +0 -0
  140. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/mcp_prompts/hook_creator.py +0 -0
  141. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/messaging/__init__.py +0 -0
  142. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/messaging/bus.py +0 -0
  143. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/messaging/commands.py +0 -0
  144. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/messaging/markdown_patches.py +0 -0
  145. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/messaging/message_queue.py +0 -0
  146. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/messaging/messages.py +0 -0
  147. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/messaging/pause_controller.py +0 -0
  148. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/messaging/queue_console.py +0 -0
  149. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/messaging/renderers.py +0 -0
  150. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/messaging/rich_renderer.py +0 -0
  151. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/messaging/spinner/__init__.py +0 -0
  152. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/messaging/spinner/console_spinner.py +0 -0
  153. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/messaging/spinner/spinner_base.py +0 -0
  154. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/messaging/subagent_console.py +0 -0
  155. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/model_descriptions.py +0 -0
  156. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/model_factory.py +0 -0
  157. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/model_switching.py +0 -0
  158. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/model_utils.py +0 -0
  159. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/models.json +0 -0
  160. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/models_dev_api.json +0 -0
  161. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/models_dev_parser.py +0 -0
  162. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/agent_skills/__init__.py +0 -0
  163. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/agent_skills/config.py +0 -0
  164. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/agent_skills/discovery.py +0 -0
  165. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/agent_skills/downloader.py +0 -0
  166. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/agent_skills/enabled_skills.py +0 -0
  167. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/agent_skills/installer.py +0 -0
  168. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/agent_skills/metadata.py +0 -0
  169. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/agent_skills/prompt_builder.py +0 -0
  170. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/agent_skills/register_callbacks.py +0 -0
  171. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/agent_skills/remote_catalog.py +0 -0
  172. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/agent_skills/skill_catalog.py +0 -0
  173. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/agent_skills/skill_commands.py +0 -0
  174. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/agent_skills/skills_install_menu.py +0 -0
  175. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/agent_skills/skills_menu.py +0 -0
  176. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/agent_steering/README.md +0 -0
  177. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/agent_steering/__init__.py +0 -0
  178. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/agent_steering/register_callbacks.py +0 -0
  179. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/agent_steering/steering_prompt.py +0 -0
  180. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/aws_bedrock/__init__.py +0 -0
  181. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/aws_bedrock/config.py +0 -0
  182. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/aws_bedrock/register_callbacks.py +0 -0
  183. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/aws_bedrock/utils.py +0 -0
  184. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/azure_foundry/README.md +0 -0
  185. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/azure_foundry/__init__.py +0 -0
  186. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/azure_foundry/config.py +0 -0
  187. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/azure_foundry/discovery.py +0 -0
  188. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/azure_foundry/register_callbacks.py +0 -0
  189. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/azure_foundry/token.py +0 -0
  190. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/azure_foundry/utils.py +0 -0
  191. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/chatgpt_oauth/__init__.py +0 -0
  192. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/chatgpt_oauth/config.py +0 -0
  193. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/chatgpt_oauth/oauth_flow.py +0 -0
  194. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/chatgpt_oauth/register_callbacks.py +0 -0
  195. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/chatgpt_oauth/test_plugin.py +0 -0
  196. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/chatgpt_oauth/utils.py +0 -0
  197. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/claude_code_hooks/__init__.py +0 -0
  198. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/claude_code_hooks/config.py +0 -0
  199. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/claude_code_hooks/register_callbacks.py +0 -0
  200. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/claude_code_oauth/README.md +0 -0
  201. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/claude_code_oauth/SETUP.md +0 -0
  202. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/claude_code_oauth/__init__.py +0 -0
  203. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/claude_code_oauth/config.py +0 -0
  204. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/claude_code_oauth/fast_mode.py +0 -0
  205. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/claude_code_oauth/prompt_handler.py +0 -0
  206. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/claude_code_oauth/register_callbacks.py +0 -0
  207. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/claude_code_oauth/test_fast_mode.py +0 -0
  208. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/claude_code_oauth/test_plugin.py +0 -0
  209. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/claude_code_oauth/token_refresh_heartbeat.py +0 -0
  210. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/claude_code_oauth/utils.py +0 -0
  211. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/context_indicator/__init__.py +0 -0
  212. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/context_indicator/register_callbacks.py +0 -0
  213. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/context_indicator/usage.py +0 -0
  214. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/copilot_auth/__init__.py +0 -0
  215. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/copilot_auth/config.py +0 -0
  216. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/copilot_auth/reasoning_client.py +0 -0
  217. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/copilot_auth/register_callbacks.py +0 -0
  218. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/copilot_auth/utils.py +0 -0
  219. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/customizable_commands/__init__.py +0 -0
  220. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/customizable_commands/register_callbacks.py +0 -0
  221. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/dbos_durable_exec/__init__.py +0 -0
  222. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/dbos_durable_exec/cancel.py +0 -0
  223. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/dbos_durable_exec/commands.py +0 -0
  224. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/dbos_durable_exec/config.py +0 -0
  225. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/dbos_durable_exec/lifecycle.py +0 -0
  226. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/dbos_durable_exec/register_callbacks.py +0 -0
  227. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/dbos_durable_exec/runtime.py +0 -0
  228. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/dbos_durable_exec/workflow_ids.py +0 -0
  229. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/dbos_durable_exec/wrapper.py +0 -0
  230. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/destructive_command_guard/__init__.py +0 -0
  231. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/destructive_command_guard/detector.py +0 -0
  232. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/destructive_command_guard/register_callbacks.py +0 -0
  233. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/emoji_filter/__init__.py +0 -0
  234. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/emoji_filter/config.py +0 -0
  235. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/emoji_filter/register_callbacks.py +0 -0
  236. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/emoji_filter/stripper.py +0 -0
  237. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/example_custom_command/register_callbacks.py +0 -0
  238. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/file_permission_handler/__init__.py +0 -0
  239. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/file_permission_handler/register_callbacks.py +0 -0
  240. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/force_push_guard/__init__.py +0 -0
  241. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/force_push_guard/detector.py +0 -0
  242. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/force_push_guard/register_callbacks.py +0 -0
  243. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/force_push_guard/test_detector.py +0 -0
  244. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/frontend_emitter/__init__.py +0 -0
  245. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/frontend_emitter/emitter.py +0 -0
  246. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/frontend_emitter/register_callbacks.py +0 -0
  247. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/frontend_emitter/session_context.py +0 -0
  248. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/hook_creator/__init__.py +0 -0
  249. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/hook_creator/register_callbacks.py +0 -0
  250. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/hook_manager/__init__.py +0 -0
  251. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/hook_manager/config.py +0 -0
  252. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/hook_manager/hooks_menu.py +0 -0
  253. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/hook_manager/register_callbacks.py +0 -0
  254. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/oauth_puppy_html.py +0 -0
  255. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/obsidian_agent/README.md +0 -0
  256. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/obsidian_agent/__init__.py +0 -0
  257. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/obsidian_agent/agent_obsidian.py +0 -0
  258. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/obsidian_agent/register_callbacks.py +0 -0
  259. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/ollama/__init__.py +0 -0
  260. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/ollama/register_callbacks.py +0 -0
  261. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/ollama_setup/__init__.py +0 -0
  262. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/ollama_setup/completer.py +0 -0
  263. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/ollama_setup/register_callbacks.py +0 -0
  264. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/pop_command/__init__.py +0 -0
  265. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/pop_command/register_callbacks.py +0 -0
  266. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/prompt_newline/__init__.py +0 -0
  267. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/prompt_newline/config.py +0 -0
  268. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/prompt_newline/register_callbacks.py +0 -0
  269. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/prune/__init__.py +0 -0
  270. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/prune/prune_menu.py +0 -0
  271. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/prune/prune_model.py +0 -0
  272. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/prune/prune_render.py +0 -0
  273. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/prune/register_callbacks.py +0 -0
  274. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/puppy_kennel/README.md +0 -0
  275. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/puppy_kennel/__init__.py +0 -0
  276. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/puppy_kennel/commands.py +0 -0
  277. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/puppy_kennel/config.py +0 -0
  278. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/puppy_kennel/kennel.py +0 -0
  279. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/puppy_kennel/packer.py +0 -0
  280. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/puppy_kennel/recorder.py +0 -0
  281. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/puppy_kennel/register_callbacks.py +0 -0
  282. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/puppy_kennel/retriever.py +0 -0
  283. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/puppy_kennel/schema.py +0 -0
  284. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/puppy_kennel/state.py +0 -0
  285. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/puppy_kennel/tools.py +0 -0
  286. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/puppy_kennel/wings.py +0 -0
  287. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/review_pr/__init__.py +0 -0
  288. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/review_pr/register_callbacks.py +0 -0
  289. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/shell_safety/__init__.py +0 -0
  290. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/shell_safety/agent_shell_safety.py +0 -0
  291. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/shell_safety/command_cache.py +0 -0
  292. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/shell_safety/register_callbacks.py +0 -0
  293. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/statusline/__init__.py +0 -0
  294. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/statusline/config.py +0 -0
  295. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/statusline/payload.py +0 -0
  296. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/statusline/prompt_patch.py +0 -0
  297. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/statusline/register_callbacks.py +0 -0
  298. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/statusline/runner.py +0 -0
  299. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/statusline/statusline_command.py +0 -0
  300. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/switch_agent_resume/__init__.py +0 -0
  301. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/switch_agent_resume/register_callbacks.py +0 -0
  302. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/synthetic_status/__init__.py +0 -0
  303. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/synthetic_status/register_callbacks.py +0 -0
  304. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/synthetic_status/status_api.py +0 -0
  305. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/theme/README.md +0 -0
  306. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/theme/__init__.py +0 -0
  307. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/theme/bundled_palettes.py +0 -0
  308. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/theme/content_styles.py +0 -0
  309. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/theme/osc_palette.py +0 -0
  310. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/theme/picker.py +0 -0
  311. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/theme/register_callbacks.py +0 -0
  312. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/theme/rich_themes.py +0 -0
  313. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/theme/themes.py +0 -0
  314. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/token_ratio_learner/__init__.py +0 -0
  315. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/token_ratio_learner/ratios.py +0 -0
  316. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/token_ratio_learner/register_callbacks.py +0 -0
  317. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/universal_constructor/__init__.py +0 -0
  318. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/universal_constructor/models.py +0 -0
  319. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/universal_constructor/register_callbacks.py +0 -0
  320. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/universal_constructor/registry.py +0 -0
  321. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/universal_constructor/sandbox.py +0 -0
  322. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/wide_completion_menu/__init__.py +0 -0
  323. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/wide_completion_menu/register_callbacks.py +0 -0
  324. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/wiggum/__init__.py +0 -0
  325. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/wiggum/judge.py +0 -0
  326. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/wiggum/judge_config.py +0 -0
  327. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/wiggum/register_callbacks.py +0 -0
  328. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/wiggum/state.py +0 -0
  329. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/provider_credentials.py +0 -0
  330. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/provider_identity.py +0 -0
  331. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/pydantic_patches.py +0 -0
  332. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/reopenable_async_client.py +0 -0
  333. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/round_robin_model.py +0 -0
  334. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/session_storage.py +0 -0
  335. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/status_display.py +0 -0
  336. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/summarization_agent.py +0 -0
  337. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/terminal_utils.py +0 -0
  338. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/tools/__init__.py +0 -0
  339. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/tools/agent_tools.py +0 -0
  340. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/tools/ask_user_question/__init__.py +0 -0
  341. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/tools/ask_user_question/constants.py +0 -0
  342. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/tools/ask_user_question/demo_tui.py +0 -0
  343. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/tools/ask_user_question/handler.py +0 -0
  344. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/tools/ask_user_question/models.py +0 -0
  345. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/tools/ask_user_question/registration.py +0 -0
  346. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/tools/ask_user_question/renderers.py +0 -0
  347. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/tools/ask_user_question/terminal_ui.py +0 -0
  348. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/tools/ask_user_question/theme.py +0 -0
  349. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/tools/ask_user_question/tui_loop.py +0 -0
  350. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/tools/browser/__init__.py +0 -0
  351. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/tools/browser/browser_control.py +0 -0
  352. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/tools/browser/browser_interactions.py +0 -0
  353. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/tools/browser/browser_locators.py +0 -0
  354. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/tools/browser/browser_manager.py +0 -0
  355. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/tools/browser/browser_navigation.py +0 -0
  356. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/tools/browser/browser_screenshot.py +0 -0
  357. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/tools/browser/browser_scripts.py +0 -0
  358. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/tools/browser/browser_workflows.py +0 -0
  359. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/tools/command_runner.py +0 -0
  360. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/tools/common.py +0 -0
  361. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/tools/display.py +0 -0
  362. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/tools/file_modifications.py +0 -0
  363. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/tools/file_operations.py +0 -0
  364. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/tools/image_tools.py +0 -0
  365. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/tools/model_tools.py +0 -0
  366. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/tools/skills_tools.py +0 -0
  367. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/tools/subagent_context.py +0 -0
  368. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/tools/subagent_invocation.py +0 -0
  369. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/tools/tools_content.py +0 -0
  370. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/tools/universal_constructor.py +0 -0
  371. {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/uvx_detection.py +0 -0
  372. {code_puppy-0.0.550 → code_puppy-0.0.552}/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.550
3
+ Version: 0.0.552
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
@@ -27,7 +27,9 @@ from code_puppy.callbacks import (
27
27
  on_wrap_pydantic_agent,
28
28
  )
29
29
  from code_puppy.config import (
30
+ AGENTS_MD_MAX_CHARS_DEFAULT,
30
31
  CONFIG_DIR,
32
+ get_agents_md_max_chars,
31
33
  get_global_model_name,
32
34
  get_value,
33
35
  )
@@ -38,6 +40,54 @@ from code_puppy.model_factory import ModelFactory, make_model_settings
38
40
  _AGENT_RULE_FILES = ("AGENTS.md", "AGENT.md", "agents.md", "agent.md")
39
41
  _CODE_PUPPY_DIR = ".code_puppy"
40
42
 
43
+ # Re-export the default so callers that imported AGENTS_MD_MAX_CHARS from
44
+ # here keep working. The *effective* cap on any given load is whatever
45
+ # ``get_agents_md_max_chars()`` returns (user override via
46
+ # ``/set agents_md_max_chars=<int>``); this constant is just the fallback
47
+ # documented in the warning notice and used by tests that don't care about
48
+ # the override path.
49
+ AGENTS_MD_MAX_CHARS = AGENTS_MD_MAX_CHARS_DEFAULT
50
+
51
+
52
+ def _friendly_path(candidate: Path) -> str:
53
+ """Render ``candidate`` as ``~/relative`` when it's under ``$HOME``.
54
+
55
+ Keeps the absolute home path out of the system prompt (and out of any
56
+ Slack paste of the agent's "please trim AGENTS.md" reply).
57
+ """
58
+ try:
59
+ return f"~/{candidate.relative_to(Path.home())}"
60
+ except ValueError:
61
+ return str(candidate)
62
+
63
+
64
+ def _truncate_agents_md(content: str, source: str, max_chars: int) -> str:
65
+ """Cap one AGENTS.md file at ``max_chars`` with a labelled notice.
66
+
67
+ Returns ``content`` unchanged when it's within the cap. When it overflows,
68
+ keeps exactly the first ``max_chars`` characters of the original and
69
+ appends a delimited warning addressed to the agent (so the agent can
70
+ surface it to the user on the next turn). ``source`` is a human-readable
71
+ label for the file — used in the warning so the agent can tell the user
72
+ which specific file to trim when multiple files overflow. ``max_chars``
73
+ is resolved once per load by the caller (see ``get_agents_md_max_chars``)
74
+ so a session-wide ``/set`` override is honoured.
75
+ """
76
+ original_len = len(content)
77
+ if original_len <= max_chars:
78
+ return content
79
+ dropped = original_len - max_chars
80
+ notice = (
81
+ f"\n\n--- AGENTS.md truncated ---\n"
82
+ f"The {source} content was truncated: original was "
83
+ f"{original_len:,} chars, {dropped:,} chars dropped. Please tell "
84
+ f"the user to trim {source} below {max_chars:,} "
85
+ f"characters so the full rules can take effect (or raise the cap "
86
+ f"via `/set agents_md_max_chars=<int>`).\n"
87
+ f"--- end truncation notice ---"
88
+ )
89
+ return content[:max_chars] + notice
90
+
41
91
 
42
92
  def load_puppy_rules() -> Optional[str]:
43
93
  """Load AGENT(S).md from global config dir and/or the current project dir.
@@ -50,13 +100,24 @@ def load_puppy_rules() -> Optional[str]:
50
100
  1. ``.code_puppy/AGENTS.md`` (preferred — keeps root clean)
51
101
  2. ``./AGENTS.md`` (alternate location)
52
102
 
103
+ Each file is independently truncated via :func:`_truncate_agents_md` so
104
+ the combined system-prompt overhead stays bounded. The per-file cap is
105
+ resolved once per call via :func:`get_agents_md_max_chars` so a user
106
+ can raise (or lower) it with ``/set agents_md_max_chars=<int>``.
107
+
53
108
  Returns ``None`` if neither exists.
54
109
  """
110
+ max_chars = get_agents_md_max_chars()
111
+
55
112
  global_rules: Optional[str] = None
56
113
  for name in _AGENT_RULE_FILES:
57
114
  candidate = Path(CONFIG_DIR) / name
58
115
  if candidate.exists():
59
- global_rules = candidate.read_text(encoding="utf-8-sig")
116
+ global_rules = _truncate_agents_md(
117
+ candidate.read_text(encoding="utf-8-sig"),
118
+ source=f"global {_friendly_path(candidate)}",
119
+ max_chars=max_chars,
120
+ )
60
121
  break
61
122
 
62
123
  project_rules: Optional[str] = None
@@ -67,7 +128,11 @@ def load_puppy_rules() -> Optional[str]:
67
128
  for name in _AGENT_RULE_FILES:
68
129
  candidate = code_puppy_dir / name
69
130
  if candidate.exists():
70
- project_rules = candidate.read_text(encoding="utf-8-sig")
131
+ project_rules = _truncate_agents_md(
132
+ candidate.read_text(encoding="utf-8-sig"),
133
+ source=f"project {candidate}",
134
+ max_chars=max_chars,
135
+ )
71
136
  break
72
137
 
73
138
  # Priority 2: Fallback to project root
@@ -75,7 +140,11 @@ def load_puppy_rules() -> Optional[str]:
75
140
  for name in _AGENT_RULE_FILES:
76
141
  candidate = Path(name)
77
142
  if candidate.exists():
78
- project_rules = candidate.read_text(encoding="utf-8-sig")
143
+ project_rules = _truncate_agents_md(
144
+ candidate.read_text(encoding="utf-8-sig"),
145
+ source=f"project {candidate}",
146
+ max_chars=max_chars,
147
+ )
79
148
  break
80
149
 
81
150
  rules = [r for r in (global_rules, project_rules) if r]
@@ -1,7 +1,7 @@
1
1
  import asyncio
2
2
  import logging
3
3
  import traceback
4
- from typing import Any, Callable, Dict, List, Literal, Optional
4
+ from typing import Any, Callable, Dict, List, Literal, Optional, Set
5
5
 
6
6
  PhaseType = Literal[
7
7
  "startup",
@@ -112,6 +112,49 @@ _callbacks: Dict[PhaseType, List[CallbackFunc]] = {
112
112
 
113
113
  logger = logging.getLogger(__name__)
114
114
 
115
+ # ---------------------------------------------------------------------------
116
+ # Plugin ownership tracking
117
+ # ---------------------------------------------------------------------------
118
+ # Maps each registered callback function to the plugin that registered it.
119
+ # Populated by register_callback() when a loading context is active.
120
+ _callback_owners: Dict[CallbackFunc, str] = {}
121
+
122
+ # Set by the plugin loader before importing each plugin's register_callbacks.py,
123
+ # cleared immediately after. register_callback() reads this to record ownership.
124
+ _current_loading_plugin: Optional[str] = None
125
+
126
+
127
+ def set_loading_context(plugin_name: str) -> None:
128
+ """Mark *plugin_name* as the plugin currently being loaded.
129
+
130
+ Called by the plugin loader before importing a plugin's
131
+ ``register_callbacks`` module. Any callbacks registered while this
132
+ context is active are associated with *plugin_name*.
133
+ """
134
+ global _current_loading_plugin
135
+ _current_loading_plugin = plugin_name
136
+
137
+
138
+ def clear_loading_context() -> None:
139
+ """Clear the current plugin loading context."""
140
+ global _current_loading_plugin
141
+ _current_loading_plugin = None
142
+
143
+
144
+ def get_callback_owner(func: CallbackFunc) -> Optional[str]:
145
+ """Return the plugin name that registered *func*, or ``None``."""
146
+ return _callback_owners.get(func)
147
+
148
+
149
+ def _get_disabled_plugins() -> Set[str]:
150
+ """Lazy accessor for the disabled-plugins set (avoids circular import)."""
151
+ try:
152
+ from code_puppy.plugins.config import get_disabled_plugins
153
+
154
+ return get_disabled_plugins()
155
+ except Exception:
156
+ return set()
157
+
115
158
 
116
159
  def register_callback(phase: PhaseType, func: CallbackFunc) -> None:
117
160
  if phase not in _callbacks:
@@ -131,6 +174,11 @@ def register_callback(phase: PhaseType, func: CallbackFunc) -> None:
131
174
  return
132
175
 
133
176
  _callbacks[phase].append(func)
177
+
178
+ # Record ownership if we know which plugin is loading.
179
+ if _current_loading_plugin is not None:
180
+ _callback_owners[func] = _current_loading_plugin
181
+
134
182
  logger.debug(f"Registered async callback {func.__name__} for phase '{phase}'")
135
183
 
136
184
 
@@ -159,8 +207,23 @@ def clear_callbacks(phase: Optional[PhaseType] = None) -> None:
159
207
  logger.debug(f"Cleared async callbacks for phase '{phase}'")
160
208
 
161
209
 
162
- def get_callbacks(phase: PhaseType) -> List[CallbackFunc]:
163
- return _callbacks.get(phase, []).copy()
210
+ def get_callbacks(
211
+ phase: PhaseType, *, include_disabled: bool = False
212
+ ) -> List[CallbackFunc]:
213
+ """Return callbacks for *phase*, filtering out disabled plugins.
214
+
215
+ When *include_disabled* is ``True`` the filter is bypassed — useful for
216
+ introspection (e.g. listing all registered callbacks).
217
+ """
218
+ all_cbs = _callbacks.get(phase, []).copy()
219
+ if include_disabled:
220
+ return all_cbs
221
+
222
+ disabled = _get_disabled_plugins()
223
+ if not disabled:
224
+ return all_cbs
225
+
226
+ return [cb for cb in all_cbs if _callback_owners.get(cb) not in disabled]
164
227
 
165
228
 
166
229
  def count_callbacks(phase: Optional[PhaseType] = None) -> int:
@@ -351,6 +351,8 @@ def get_config_keys():
351
351
  default_keys.append(f"banner_color_{banner_name}")
352
352
  # Add resume message count configuration
353
353
  default_keys.append("resume_message_count")
354
+ # Per-file AGENTS.md character cap (see get_agents_md_max_chars()).
355
+ default_keys.append("agents_md_max_chars")
354
356
  # Add /goal iteration cap (owned by the wiggum plugin, surfaced here so
355
357
  # /set autocompletes it). See plugins/wiggum/register_callbacks.py.
356
358
  default_keys.append("goal_max_iterations")
@@ -1300,6 +1302,35 @@ def get_resume_message_count() -> int:
1300
1302
  return 50
1301
1303
 
1302
1304
 
1305
+ # Default cap (in characters) for any single AGENTS.md file injected into
1306
+ # the system prompt. Users can override this via
1307
+ # ``/set agents_md_max_chars=<int>`` — any positive integer is honoured so
1308
+ # models with very large context windows (1M+ tokens) can opt into bigger
1309
+ # AGENTS.md files when it makes sense. The default of 10,000 just keeps
1310
+ # the unbounded out-of-the-box behaviour from regressing.
1311
+ AGENTS_MD_MAX_CHARS_DEFAULT = 10_000
1312
+
1313
+
1314
+ def get_agents_md_max_chars() -> int:
1315
+ """Return the per-file AGENTS.md character cap, honouring user override.
1316
+
1317
+ Read from the ``agents_md_max_chars`` config key (settable via
1318
+ ``/set agents_md_max_chars=<int>``). Defaults to
1319
+ ``AGENTS_MD_MAX_CHARS_DEFAULT`` (10,000) when unset, and falls back to
1320
+ the default on values that can't be a sensible cap (non-numeric,
1321
+ negative, zero). No upper clamp — if a user with a 1M-token model
1322
+ wants ``/set agents_md_max_chars=500000``, that's their call.
1323
+ """
1324
+ val = get_value("agents_md_max_chars")
1325
+ try:
1326
+ configured = int(val) if val else AGENTS_MD_MAX_CHARS_DEFAULT
1327
+ except (ValueError, TypeError):
1328
+ return AGENTS_MD_MAX_CHARS_DEFAULT
1329
+ if configured <= 0:
1330
+ return AGENTS_MD_MAX_CHARS_DEFAULT
1331
+ return configured
1332
+
1333
+
1303
1334
  def get_compaction_threshold():
1304
1335
  """
1305
1336
  Returns the user-configured compaction threshold as a float between 0.0 and 1.0.