code-puppy 0.0.548__tar.gz → 0.0.549__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 (367) hide show
  1. {code_puppy-0.0.548 → code_puppy-0.0.549}/PKG-INFO +1 -1
  2. code_puppy-0.0.549/code_puppy/command_line/config_apply.py +129 -0
  3. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/config_commands.py +73 -56
  4. code_puppy-0.0.549/code_puppy/command_line/set_menu.py +532 -0
  5. code_puppy-0.0.549/code_puppy/command_line/set_menu_catalog.py +593 -0
  6. code_puppy-0.0.549/code_puppy/command_line/set_menu_render.py +194 -0
  7. code_puppy-0.0.549/code_puppy/command_line/set_menu_schema.py +33 -0
  8. code_puppy-0.0.549/code_puppy/command_line/set_menu_settings.py +26 -0
  9. code_puppy-0.0.549/code_puppy/command_line/set_menu_shims.py +49 -0
  10. code_puppy-0.0.549/code_puppy/command_line/set_menu_values.py +126 -0
  11. {code_puppy-0.0.548 → code_puppy-0.0.549}/pyproject.toml +1 -1
  12. {code_puppy-0.0.548 → code_puppy-0.0.549}/.gitignore +0 -0
  13. {code_puppy-0.0.548 → code_puppy-0.0.549}/LICENSE +0 -0
  14. {code_puppy-0.0.548 → code_puppy-0.0.549}/README.md +0 -0
  15. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/__init__.py +0 -0
  16. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/__main__.py +0 -0
  17. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/agents/__init__.py +0 -0
  18. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/agents/_builder.py +0 -0
  19. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/agents/_compaction.py +0 -0
  20. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/agents/_diagnostics.py +0 -0
  21. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/agents/_history.py +0 -0
  22. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/agents/_key_listeners.py +0 -0
  23. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/agents/_non_streaming_render.py +0 -0
  24. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/agents/_run_signals.py +0 -0
  25. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/agents/_runtime.py +0 -0
  26. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/agents/_steer_processor.py +0 -0
  27. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/agents/agent_code_puppy.py +0 -0
  28. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/agents/agent_creator_agent.py +0 -0
  29. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/agents/agent_helios.py +0 -0
  30. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/agents/agent_manager.py +0 -0
  31. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/agents/agent_planning.py +0 -0
  32. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/agents/agent_qa_kitten.py +0 -0
  33. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/agents/base_agent.py +0 -0
  34. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/agents/event_stream_handler.py +0 -0
  35. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/agents/json_agent.py +0 -0
  36. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/agents/run_stats.py +0 -0
  37. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/agents/smooth_stream.py +0 -0
  38. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/agents/subagent_stream_handler.py +0 -0
  39. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/callbacks.py +0 -0
  40. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/chatgpt_codex_client.py +0 -0
  41. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/claude_cache_client.py +0 -0
  42. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/cli_runner.py +0 -0
  43. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/__init__.py +0 -0
  44. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/add_model_menu.py +0 -0
  45. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/agent_menu.py +0 -0
  46. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/attachments.py +0 -0
  47. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/autosave_menu.py +0 -0
  48. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/clipboard.py +0 -0
  49. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/colors_menu.py +0 -0
  50. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/command_handler.py +0 -0
  51. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/command_registry.py +0 -0
  52. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/core_commands.py +0 -0
  53. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/diff_menu.py +0 -0
  54. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/file_index.py +0 -0
  55. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/file_path_completion.py +0 -0
  56. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/judges_menu.py +0 -0
  57. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/load_context_completion.py +0 -0
  58. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/mcp/__init__.py +0 -0
  59. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/mcp/base.py +0 -0
  60. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/mcp/catalog_server_installer.py +0 -0
  61. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/mcp/custom_server_form.py +0 -0
  62. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/mcp/custom_server_installer.py +0 -0
  63. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/mcp/edit_command.py +0 -0
  64. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/mcp/handler.py +0 -0
  65. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/mcp/help_command.py +0 -0
  66. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/mcp/install_command.py +0 -0
  67. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/mcp/install_menu.py +0 -0
  68. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/mcp/list_command.py +0 -0
  69. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/mcp/logs_command.py +0 -0
  70. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/mcp/remove_command.py +0 -0
  71. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/mcp/restart_command.py +0 -0
  72. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/mcp/search_command.py +0 -0
  73. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/mcp/silence_warning_command.py +0 -0
  74. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/mcp/start_all_command.py +0 -0
  75. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/mcp/start_command.py +0 -0
  76. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/mcp/status_command.py +0 -0
  77. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/mcp/stop_all_command.py +0 -0
  78. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/mcp/stop_command.py +0 -0
  79. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/mcp/utils.py +0 -0
  80. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/mcp/wizard_utils.py +0 -0
  81. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/mcp_binding_menu.py +0 -0
  82. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/mcp_completion.py +0 -0
  83. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/model_picker_completion.py +0 -0
  84. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/model_settings_menu.py +0 -0
  85. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/onboarding_slides.py +0 -0
  86. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/onboarding_wizard.py +0 -0
  87. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/pagination.py +0 -0
  88. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/pin_command_completion.py +0 -0
  89. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/prompt_toolkit_completion.py +0 -0
  90. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/session_commands.py +0 -0
  91. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/shell_passthrough.py +0 -0
  92. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/skills_completion.py +0 -0
  93. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/uc_menu.py +0 -0
  94. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/utils.py +0 -0
  95. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/wiggum_state.py +0 -0
  96. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/config.py +0 -0
  97. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/error_logging.py +0 -0
  98. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/gemini_code_assist.py +0 -0
  99. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/gemini_model.py +0 -0
  100. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/hook_engine/README.md +0 -0
  101. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/hook_engine/__init__.py +0 -0
  102. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/hook_engine/aliases.py +0 -0
  103. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/hook_engine/engine.py +0 -0
  104. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/hook_engine/executor.py +0 -0
  105. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/hook_engine/matcher.py +0 -0
  106. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/hook_engine/models.py +0 -0
  107. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/hook_engine/registry.py +0 -0
  108. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/hook_engine/validator.py +0 -0
  109. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/http_utils.py +0 -0
  110. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/keymap.py +0 -0
  111. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/list_filtering.py +0 -0
  112. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/main.py +0 -0
  113. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/mcp_/__init__.py +0 -0
  114. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/mcp_/agent_bindings.py +0 -0
  115. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/mcp_/async_lifecycle.py +0 -0
  116. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/mcp_/blocking_startup.py +0 -0
  117. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/mcp_/captured_stdio_server.py +0 -0
  118. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/mcp_/circuit_breaker.py +0 -0
  119. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/mcp_/config_wizard.py +0 -0
  120. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/mcp_/dashboard.py +0 -0
  121. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/mcp_/error_isolation.py +0 -0
  122. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/mcp_/examples/retry_example.py +0 -0
  123. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/mcp_/health_monitor.py +0 -0
  124. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/mcp_/managed_server.py +0 -0
  125. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/mcp_/manager.py +0 -0
  126. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/mcp_/mcp_logs.py +0 -0
  127. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/mcp_/registry.py +0 -0
  128. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/mcp_/retry_manager.py +0 -0
  129. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/mcp_/server_registry_catalog.py +0 -0
  130. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/mcp_/status_tracker.py +0 -0
  131. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/mcp_/system_tools.py +0 -0
  132. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/mcp_prompts/__init__.py +0 -0
  133. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/mcp_prompts/hook_creator.py +0 -0
  134. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/messaging/__init__.py +0 -0
  135. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/messaging/bus.py +0 -0
  136. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/messaging/commands.py +0 -0
  137. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/messaging/markdown_patches.py +0 -0
  138. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/messaging/message_queue.py +0 -0
  139. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/messaging/messages.py +0 -0
  140. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/messaging/pause_controller.py +0 -0
  141. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/messaging/queue_console.py +0 -0
  142. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/messaging/renderers.py +0 -0
  143. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/messaging/rich_renderer.py +0 -0
  144. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/messaging/spinner/__init__.py +0 -0
  145. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/messaging/spinner/console_spinner.py +0 -0
  146. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/messaging/spinner/spinner_base.py +0 -0
  147. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/messaging/subagent_console.py +0 -0
  148. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/model_descriptions.py +0 -0
  149. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/model_factory.py +0 -0
  150. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/model_switching.py +0 -0
  151. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/model_utils.py +0 -0
  152. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/models.json +0 -0
  153. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/models_dev_api.json +0 -0
  154. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/models_dev_parser.py +0 -0
  155. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/__init__.py +0 -0
  156. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/agent_skills/__init__.py +0 -0
  157. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/agent_skills/config.py +0 -0
  158. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/agent_skills/discovery.py +0 -0
  159. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/agent_skills/downloader.py +0 -0
  160. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/agent_skills/enabled_skills.py +0 -0
  161. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/agent_skills/installer.py +0 -0
  162. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/agent_skills/metadata.py +0 -0
  163. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/agent_skills/prompt_builder.py +0 -0
  164. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/agent_skills/register_callbacks.py +0 -0
  165. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/agent_skills/remote_catalog.py +0 -0
  166. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/agent_skills/skill_catalog.py +0 -0
  167. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/agent_skills/skill_commands.py +0 -0
  168. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/agent_skills/skills_install_menu.py +0 -0
  169. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/agent_skills/skills_menu.py +0 -0
  170. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/agent_steering/README.md +0 -0
  171. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/agent_steering/__init__.py +0 -0
  172. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/agent_steering/register_callbacks.py +0 -0
  173. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/agent_steering/steering_prompt.py +0 -0
  174. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/aws_bedrock/__init__.py +0 -0
  175. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/aws_bedrock/config.py +0 -0
  176. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/aws_bedrock/register_callbacks.py +0 -0
  177. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/aws_bedrock/utils.py +0 -0
  178. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/azure_foundry/README.md +0 -0
  179. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/azure_foundry/__init__.py +0 -0
  180. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/azure_foundry/config.py +0 -0
  181. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/azure_foundry/discovery.py +0 -0
  182. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/azure_foundry/register_callbacks.py +0 -0
  183. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/azure_foundry/token.py +0 -0
  184. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/azure_foundry/utils.py +0 -0
  185. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/chatgpt_oauth/__init__.py +0 -0
  186. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/chatgpt_oauth/config.py +0 -0
  187. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/chatgpt_oauth/oauth_flow.py +0 -0
  188. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/chatgpt_oauth/register_callbacks.py +0 -0
  189. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/chatgpt_oauth/test_plugin.py +0 -0
  190. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/chatgpt_oauth/utils.py +0 -0
  191. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/claude_code_hooks/__init__.py +0 -0
  192. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/claude_code_hooks/config.py +0 -0
  193. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/claude_code_hooks/register_callbacks.py +0 -0
  194. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/claude_code_oauth/README.md +0 -0
  195. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/claude_code_oauth/SETUP.md +0 -0
  196. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/claude_code_oauth/__init__.py +0 -0
  197. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/claude_code_oauth/config.py +0 -0
  198. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/claude_code_oauth/fast_mode.py +0 -0
  199. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/claude_code_oauth/prompt_handler.py +0 -0
  200. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/claude_code_oauth/register_callbacks.py +0 -0
  201. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/claude_code_oauth/test_fast_mode.py +0 -0
  202. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/claude_code_oauth/test_plugin.py +0 -0
  203. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/claude_code_oauth/token_refresh_heartbeat.py +0 -0
  204. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/claude_code_oauth/utils.py +0 -0
  205. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/context_indicator/__init__.py +0 -0
  206. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/context_indicator/register_callbacks.py +0 -0
  207. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/context_indicator/usage.py +0 -0
  208. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/copilot_auth/__init__.py +0 -0
  209. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/copilot_auth/config.py +0 -0
  210. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/copilot_auth/reasoning_client.py +0 -0
  211. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/copilot_auth/register_callbacks.py +0 -0
  212. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/copilot_auth/utils.py +0 -0
  213. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/customizable_commands/__init__.py +0 -0
  214. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/customizable_commands/register_callbacks.py +0 -0
  215. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/dbos_durable_exec/__init__.py +0 -0
  216. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/dbos_durable_exec/cancel.py +0 -0
  217. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/dbos_durable_exec/commands.py +0 -0
  218. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/dbos_durable_exec/config.py +0 -0
  219. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/dbos_durable_exec/lifecycle.py +0 -0
  220. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/dbos_durable_exec/register_callbacks.py +0 -0
  221. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/dbos_durable_exec/runtime.py +0 -0
  222. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/dbos_durable_exec/workflow_ids.py +0 -0
  223. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/dbos_durable_exec/wrapper.py +0 -0
  224. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/destructive_command_guard/__init__.py +0 -0
  225. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/destructive_command_guard/detector.py +0 -0
  226. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/destructive_command_guard/register_callbacks.py +0 -0
  227. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/emoji_filter/__init__.py +0 -0
  228. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/emoji_filter/config.py +0 -0
  229. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/emoji_filter/register_callbacks.py +0 -0
  230. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/emoji_filter/stripper.py +0 -0
  231. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/example_custom_command/README.md +0 -0
  232. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/example_custom_command/register_callbacks.py +0 -0
  233. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/file_permission_handler/__init__.py +0 -0
  234. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/file_permission_handler/register_callbacks.py +0 -0
  235. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/force_push_guard/__init__.py +0 -0
  236. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/force_push_guard/detector.py +0 -0
  237. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/force_push_guard/register_callbacks.py +0 -0
  238. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/force_push_guard/test_detector.py +0 -0
  239. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/frontend_emitter/__init__.py +0 -0
  240. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/frontend_emitter/emitter.py +0 -0
  241. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/frontend_emitter/register_callbacks.py +0 -0
  242. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/frontend_emitter/session_context.py +0 -0
  243. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/hook_creator/__init__.py +0 -0
  244. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/hook_creator/register_callbacks.py +0 -0
  245. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/hook_manager/__init__.py +0 -0
  246. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/hook_manager/config.py +0 -0
  247. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/hook_manager/hooks_menu.py +0 -0
  248. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/hook_manager/register_callbacks.py +0 -0
  249. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/oauth_puppy_html.py +0 -0
  250. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/obsidian_agent/README.md +0 -0
  251. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/obsidian_agent/__init__.py +0 -0
  252. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/obsidian_agent/agent_obsidian.py +0 -0
  253. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/obsidian_agent/register_callbacks.py +0 -0
  254. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/ollama/__init__.py +0 -0
  255. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/ollama/register_callbacks.py +0 -0
  256. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/ollama_setup/__init__.py +0 -0
  257. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/ollama_setup/completer.py +0 -0
  258. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/ollama_setup/register_callbacks.py +0 -0
  259. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/pop_command/__init__.py +0 -0
  260. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/pop_command/register_callbacks.py +0 -0
  261. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/prompt_newline/__init__.py +0 -0
  262. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/prompt_newline/config.py +0 -0
  263. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/prompt_newline/register_callbacks.py +0 -0
  264. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/prune/__init__.py +0 -0
  265. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/prune/prune_menu.py +0 -0
  266. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/prune/prune_model.py +0 -0
  267. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/prune/prune_render.py +0 -0
  268. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/prune/register_callbacks.py +0 -0
  269. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/puppy_kennel/README.md +0 -0
  270. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/puppy_kennel/__init__.py +0 -0
  271. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/puppy_kennel/commands.py +0 -0
  272. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/puppy_kennel/config.py +0 -0
  273. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/puppy_kennel/kennel.py +0 -0
  274. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/puppy_kennel/packer.py +0 -0
  275. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/puppy_kennel/recorder.py +0 -0
  276. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/puppy_kennel/register_callbacks.py +0 -0
  277. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/puppy_kennel/retriever.py +0 -0
  278. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/puppy_kennel/schema.py +0 -0
  279. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/puppy_kennel/state.py +0 -0
  280. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/puppy_kennel/tools.py +0 -0
  281. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/puppy_kennel/wings.py +0 -0
  282. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/review_pr/__init__.py +0 -0
  283. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/review_pr/register_callbacks.py +0 -0
  284. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/shell_safety/__init__.py +0 -0
  285. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/shell_safety/agent_shell_safety.py +0 -0
  286. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/shell_safety/command_cache.py +0 -0
  287. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/shell_safety/register_callbacks.py +0 -0
  288. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/statusline/__init__.py +0 -0
  289. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/statusline/config.py +0 -0
  290. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/statusline/payload.py +0 -0
  291. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/statusline/prompt_patch.py +0 -0
  292. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/statusline/register_callbacks.py +0 -0
  293. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/statusline/runner.py +0 -0
  294. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/statusline/statusline_command.py +0 -0
  295. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/switch_agent_resume/__init__.py +0 -0
  296. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/switch_agent_resume/register_callbacks.py +0 -0
  297. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/synthetic_status/__init__.py +0 -0
  298. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/synthetic_status/register_callbacks.py +0 -0
  299. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/synthetic_status/status_api.py +0 -0
  300. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/theme/README.md +0 -0
  301. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/theme/__init__.py +0 -0
  302. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/theme/bundled_palettes.py +0 -0
  303. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/theme/content_styles.py +0 -0
  304. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/theme/osc_palette.py +0 -0
  305. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/theme/picker.py +0 -0
  306. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/theme/register_callbacks.py +0 -0
  307. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/theme/rich_themes.py +0 -0
  308. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/theme/themes.py +0 -0
  309. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/token_ratio_learner/__init__.py +0 -0
  310. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/token_ratio_learner/ratios.py +0 -0
  311. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/token_ratio_learner/register_callbacks.py +0 -0
  312. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/universal_constructor/__init__.py +0 -0
  313. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/universal_constructor/models.py +0 -0
  314. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/universal_constructor/register_callbacks.py +0 -0
  315. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/universal_constructor/registry.py +0 -0
  316. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/universal_constructor/sandbox.py +0 -0
  317. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/wide_completion_menu/__init__.py +0 -0
  318. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/wide_completion_menu/register_callbacks.py +0 -0
  319. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/wiggum/__init__.py +0 -0
  320. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/wiggum/judge.py +0 -0
  321. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/wiggum/judge_config.py +0 -0
  322. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/wiggum/register_callbacks.py +0 -0
  323. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/wiggum/state.py +0 -0
  324. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/provider_credentials.py +0 -0
  325. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/provider_identity.py +0 -0
  326. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/pydantic_patches.py +0 -0
  327. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/reopenable_async_client.py +0 -0
  328. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/round_robin_model.py +0 -0
  329. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/session_storage.py +0 -0
  330. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/status_display.py +0 -0
  331. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/summarization_agent.py +0 -0
  332. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/terminal_utils.py +0 -0
  333. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/tools/__init__.py +0 -0
  334. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/tools/agent_tools.py +0 -0
  335. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/tools/ask_user_question/__init__.py +0 -0
  336. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/tools/ask_user_question/constants.py +0 -0
  337. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/tools/ask_user_question/demo_tui.py +0 -0
  338. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/tools/ask_user_question/handler.py +0 -0
  339. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/tools/ask_user_question/models.py +0 -0
  340. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/tools/ask_user_question/registration.py +0 -0
  341. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/tools/ask_user_question/renderers.py +0 -0
  342. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/tools/ask_user_question/terminal_ui.py +0 -0
  343. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/tools/ask_user_question/theme.py +0 -0
  344. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/tools/ask_user_question/tui_loop.py +0 -0
  345. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/tools/browser/__init__.py +0 -0
  346. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/tools/browser/browser_control.py +0 -0
  347. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/tools/browser/browser_interactions.py +0 -0
  348. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/tools/browser/browser_locators.py +0 -0
  349. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/tools/browser/browser_manager.py +0 -0
  350. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/tools/browser/browser_navigation.py +0 -0
  351. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/tools/browser/browser_screenshot.py +0 -0
  352. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/tools/browser/browser_scripts.py +0 -0
  353. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/tools/browser/browser_workflows.py +0 -0
  354. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/tools/command_runner.py +0 -0
  355. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/tools/common.py +0 -0
  356. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/tools/display.py +0 -0
  357. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/tools/file_modifications.py +0 -0
  358. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/tools/file_operations.py +0 -0
  359. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/tools/image_tools.py +0 -0
  360. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/tools/model_tools.py +0 -0
  361. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/tools/skills_tools.py +0 -0
  362. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/tools/subagent_context.py +0 -0
  363. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/tools/subagent_invocation.py +0 -0
  364. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/tools/tools_content.py +0 -0
  365. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/tools/universal_constructor.py +0 -0
  366. {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/uvx_detection.py +0 -0
  367. {code_puppy-0.0.548 → code_puppy-0.0.549}/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.548
3
+ Version: 0.0.549
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
@@ -0,0 +1,129 @@
1
+ """Single-key config writes with validation + side effects.
2
+
3
+ Used by both the ``/set`` slash command and the interactive ``/set``
4
+ menu so validation rules (e.g. ``cancel_agent_key`` allow-list) and
5
+ restart-required warnings stay in one place.
6
+
7
+ Lives in its own module to break the import cycle that would otherwise
8
+ form between ``config_commands`` and ``set_menu``.
9
+ """
10
+
11
+ from __future__ import annotations
12
+
13
+ from dataclasses import dataclass
14
+ from typing import Optional
15
+
16
+
17
+ @dataclass(frozen=True)
18
+ class ApplyResult:
19
+ """Outcome of writing a single config key/value pair.
20
+
21
+ ``warning`` carries validation/policy notices that should fire
22
+ regardless of whether the agent reload succeeds (e.g. restart-required
23
+ notices for ``enable_dbos`` and ``cancel_agent_key``).
24
+ ``reload_error`` is the separate "the config saved fine but the live
25
+ agent couldn't be reloaded" signal -- keeping it on its own field
26
+ means a reload failure can't silently clobber a restart notice.
27
+ """
28
+
29
+ ok: bool
30
+ value_after: Optional[str] = None
31
+ error: Optional[str] = None
32
+ warning: Optional[str] = None
33
+ reload_error: Optional[str] = None
34
+ requires_restart: bool = False
35
+
36
+
37
+ def _restart_notice(label: str) -> str:
38
+ return f"{label} changed. Please restart Code Puppy for this change to take effect."
39
+
40
+
41
+ def invalidate_post_write_caches(key: str) -> None:
42
+ """Invalidate any in-memory caches whose source-of-truth just changed.
43
+
44
+ Some config getters cache resolved values per-process to avoid
45
+ re-reading puppy.cfg + validating registries on every call. After a
46
+ write (set OR reset) those caches need explicit invalidation, or
47
+ subsequent reads return the stale pre-write value until the process
48
+ restarts -- which is exactly how users discover this kind of bug.
49
+
50
+ Called from both the slash-set path (:func:`apply_setting`) and the
51
+ menu reset path so the two stay in lock-step.
52
+
53
+ Today only the ``model`` key has a cache that needs this treatment;
54
+ add new keys here as they grow caches.
55
+ """
56
+ if key == "model":
57
+ from code_puppy.config import clear_model_cache, reset_session_model
58
+
59
+ reset_session_model()
60
+ clear_model_cache()
61
+
62
+
63
+ def apply_setting(
64
+ key: str,
65
+ value: str,
66
+ *,
67
+ reload_agent: bool = True,
68
+ ) -> ApplyResult:
69
+ """Persist ``key`` -> ``value`` to ``puppy.cfg`` with validation.
70
+
71
+ Parameters
72
+ ----------
73
+ key:
74
+ Config key to write.
75
+ value:
76
+ Value to persist. Stored as-is unless validation normalises it
77
+ (e.g. ``cancel_agent_key`` is lower-cased).
78
+ reload_agent:
79
+ When True (the default) the currently-active agent is reloaded
80
+ so the change takes effect immediately. The menu passes False
81
+ per-edit and triggers a single reload at picker exit to avoid
82
+ reload thrash when the user edits multiple settings.
83
+ """
84
+ from code_puppy.config import set_config_value
85
+
86
+ if not key:
87
+ return ApplyResult(ok=False, error="You must supply a key.")
88
+
89
+ warning: Optional[str] = None
90
+ requires_restart = False
91
+ normalized_value = value
92
+
93
+ if key == "cancel_agent_key":
94
+ from code_puppy.keymap import VALID_CANCEL_KEYS
95
+
96
+ normalized_value = value.strip().lower()
97
+ if normalized_value not in VALID_CANCEL_KEYS:
98
+ return ApplyResult(
99
+ ok=False,
100
+ error=(
101
+ f"Invalid cancel_agent_key '{value}'. Valid options: "
102
+ f"{', '.join(sorted(VALID_CANCEL_KEYS))}"
103
+ ),
104
+ )
105
+ warning = _restart_notice("cancel_agent_key")
106
+ requires_restart = True
107
+ elif key == "enable_dbos":
108
+ warning = _restart_notice("DBOS configuration")
109
+ requires_restart = True
110
+
111
+ set_config_value(key, normalized_value)
112
+ invalidate_post_write_caches(key)
113
+
114
+ reload_error: Optional[str] = None
115
+ if reload_agent:
116
+ from code_puppy.agents import get_current_agent
117
+
118
+ try:
119
+ get_current_agent().reload_code_generation_agent()
120
+ except Exception as exc:
121
+ reload_error = f"Config saved but agent reload failed: {exc}"
122
+
123
+ return ApplyResult(
124
+ ok=True,
125
+ value_after=normalized_value,
126
+ warning=warning,
127
+ reload_error=reload_error,
128
+ requires_restart=requires_restart,
129
+ )
@@ -5,9 +5,10 @@ discovered by the command registry system.
5
5
  """
6
6
 
7
7
  import json
8
+ from typing import Optional
8
9
 
9
10
  from code_puppy.command_line.command_registry import register_command
10
- from code_puppy.config import get_config_keys
11
+ from code_puppy.command_line.config_apply import apply_setting
11
12
 
12
13
 
13
14
  # Import get_commands_help from command_handler to avoid circular imports
@@ -171,21 +172,18 @@ def handle_verbosity_command(command: str) -> bool:
171
172
 
172
173
  @register_command(
173
174
  name="set",
174
- description="Set puppy config (e.g., /set yolo_mode true)",
175
- usage="/set <key> <value>",
175
+ description="Set puppy config (e.g., /set yolo_mode true) or launch interactive menu",
176
+ usage="/set [key [value]]",
176
177
  category="config",
177
178
  )
178
179
  def handle_set_command(command: str) -> bool:
179
- """Set configuration values."""
180
- from rich.text import Text
181
-
182
- from code_puppy.config import set_config_value
180
+ """Set configuration values, or launch the interactive picker."""
183
181
  from code_puppy.messaging import emit_error, emit_info, emit_success, emit_warning
184
182
 
185
183
  tokens = command.split(None, 2)
186
184
  argstr = command[len("/set") :].strip()
187
- key = None
188
- value = None
185
+ key: Optional[str] = None
186
+ value: Optional[str] = None
189
187
  if "=" in argstr:
190
188
  key, value = argstr.split("=", 1)
191
189
  key = key.strip()
@@ -197,64 +195,83 @@ def handle_set_command(command: str) -> bool:
197
195
  key = tokens[1]
198
196
  value = ""
199
197
  else:
200
- config_keys = get_config_keys()
201
- if "compaction_strategy" not in config_keys:
202
- config_keys.append("compaction_strategy")
203
- session_help = (
204
- "\n[yellow]Session Management[/yellow]"
205
- "\n [cyan]auto_save_session[/cyan] Auto-save chat after every response (true/false)"
206
- )
207
- keymap_help = (
208
- "\n[yellow]Keyboard Shortcuts[/yellow]"
209
- "\n [cyan]cancel_agent_key[/cyan] Key to cancel agent tasks (ctrl+c, ctrl+k, or ctrl+q)"
210
- )
211
- emit_warning(
212
- Text.from_markup(
213
- f"Usage: /set KEY=VALUE or /set KEY VALUE\nConfig keys: {', '.join(config_keys)}\n[dim]Note: compaction_strategy can be 'summarization' or 'truncation'[/dim]{session_help}{keymap_help}"
214
- )
215
- )
198
+ # No arguments -- launch the interactive config menu
199
+ _launch_interactive_set_menu()
216
200
  return True
217
- if key:
218
- # Check if we're toggling DBOS enablement
219
- if key == "enable_dbos":
220
- emit_info(
221
- Text.from_markup(
222
- "[yellow]⚠️ DBOS configuration changed. Please restart Code Puppy for this change to take effect.[/yellow]"
223
- )
224
- )
225
201
 
226
- # Validate cancel_agent_key before setting
227
- if key == "cancel_agent_key":
228
- from code_puppy.keymap import VALID_CANCEL_KEYS
202
+ if not key:
203
+ emit_error("You must supply a key.")
204
+ return True
229
205
 
230
- normalized_value = value.strip().lower()
231
- if normalized_value not in VALID_CANCEL_KEYS:
232
- emit_error(
233
- f"Invalid cancel_agent_key '{value}'. Valid options: {', '.join(sorted(VALID_CANCEL_KEYS))}"
234
- )
235
- return True
236
- value = normalized_value # Use normalized value
237
- emit_info(
238
- Text.from_markup(
239
- "[yellow]⚠️ cancel_agent_key changed. Please restart Code Puppy for this change to take effect.[/yellow]"
240
- )
241
- )
206
+ result = apply_setting(key, value or "", reload_agent=True)
207
+ if not result.ok:
208
+ emit_error(result.error or "Failed to apply setting.")
209
+ return True
210
+
211
+ from code_puppy.command_line.set_menu_values import is_sensitive_key, mask_value
242
212
 
243
- set_config_value(key, value)
244
- emit_success(f'Set {key} = "{value}" in puppy.cfg!')
213
+ display = (
214
+ mask_value(result.value_after or "")
215
+ if is_sensitive_key(key)
216
+ else result.value_after
217
+ )
218
+ emit_success(f'Set {key} = "{display}" in puppy.cfg!')
219
+ # Restart notices (warning) and the reload-success/failure signal
220
+ # are independent: a restart-required key like ``enable_dbos``
221
+ # should still report whether the live agent reload happened. The
222
+ # original ``/set`` always emitted "Agent reloaded with updated
223
+ # config" alongside the restart notice; preserve that contract.
224
+ if result.warning:
225
+ emit_warning(result.warning)
226
+ if result.reload_error:
227
+ emit_warning(result.reload_error)
228
+ else:
229
+ emit_info("Agent reloaded with updated config")
230
+ return True
231
+
232
+
233
+ def _launch_interactive_set_menu() -> None:
234
+ """Run the picker in a worker thread and drain any queued messages.
235
+
236
+ The picker owns the terminal while prompt_toolkit is active, so it
237
+ can't safely emit messages itself; instead it returns them in
238
+ ``PickerResult.pending_messages`` and we emit them here on the
239
+ main thread once the picker has fully exited.
240
+ """
241
+ import asyncio
242
+ import concurrent.futures
243
+
244
+ from code_puppy.command_line.set_menu import interactive_set_picker
245
+ from code_puppy.messaging import emit_error, emit_info, emit_success, emit_warning
246
+
247
+ _LEVEL_EMITTERS = {
248
+ "info": emit_info,
249
+ "success": emit_success,
250
+ "warning": emit_warning,
251
+ "error": emit_error,
252
+ }
253
+
254
+ with concurrent.futures.ThreadPoolExecutor() as executor:
255
+ future = executor.submit(lambda: asyncio.run(interactive_set_picker()))
256
+ result = future.result(timeout=300) # 5 min timeout
257
+
258
+ if result is None:
259
+ return
260
+ for level, message in result.pending_messages:
261
+ emitter = _LEVEL_EMITTERS.get(level, emit_info)
262
+ emitter(message)
245
263
 
246
- # Reload the current agent to pick up the new config
264
+ # Coalesce all agent reloads into a single one at the end, but only
265
+ # when the user actually changed something. Failures here mirror the
266
+ # behaviour of the per-key path: warn, don't crash.
267
+ if result.changed_settings:
247
268
  from code_puppy.agents import get_current_agent
248
269
 
249
270
  try:
250
- current_agent = get_current_agent()
251
- current_agent.reload_code_generation_agent()
271
+ get_current_agent().reload_code_generation_agent()
252
272
  emit_info("Agent reloaded with updated config")
253
273
  except Exception as reload_error:
254
274
  emit_warning(f"Config saved but agent reload failed: {reload_error}")
255
- else:
256
- emit_error("You must supply a key.")
257
- return True
258
275
 
259
276
 
260
277
  def _get_json_agents_pinned_to_model(model_name: str) -> list: