code-puppy 0.0.882__tar.gz → 0.0.883__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 (322) hide show
  1. {code_puppy-0.0.882 → code_puppy-0.0.883}/PKG-INFO +1 -1
  2. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/callbacks.py +25 -0
  3. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/command_line/completers.py +6 -2
  4. code_puppy-0.0.883/code_puppy/command_line/set_menu_settings.py +44 -0
  5. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/command_line/set_menu_values.py +6 -9
  6. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/config.py +12 -0
  7. {code_puppy-0.0.882 → code_puppy-0.0.883}/pyproject.toml +1 -1
  8. code_puppy-0.0.882/code_puppy/command_line/set_menu_settings.py +0 -26
  9. {code_puppy-0.0.882 → code_puppy-0.0.883}/.gitignore +0 -0
  10. {code_puppy-0.0.882 → code_puppy-0.0.883}/LICENSE +0 -0
  11. {code_puppy-0.0.882 → code_puppy-0.0.883}/README.md +0 -0
  12. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/__init__.py +0 -0
  13. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/__main__.py +0 -0
  14. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/_plugin_i18n_lifecycle.py +0 -0
  15. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/_pydantic_tool_helpers.py +0 -0
  16. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/_pydantic_video_patch.py +0 -0
  17. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/agent_completion_inbox.py +0 -0
  18. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/agent_execution_context.py +0 -0
  19. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/agents/__init__.py +0 -0
  20. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/agents/_builder.py +0 -0
  21. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/agents/_code_mode.py +0 -0
  22. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/agents/_code_mode_guidance.py +0 -0
  23. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/agents/_compaction.py +0 -0
  24. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/agents/_diagnostics.py +0 -0
  25. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/agents/_history.py +0 -0
  26. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/agents/_key_listeners.py +0 -0
  27. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/agents/_model_message_transform.py +0 -0
  28. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/agents/_non_streaming_render.py +0 -0
  29. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/agents/_output_limits.py +0 -0
  30. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/agents/_run_signals.py +0 -0
  31. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/agents/_runtime.py +0 -0
  32. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/agents/_steer_processor.py +0 -0
  33. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/agents/_subagent_recursion.py +0 -0
  34. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/agents/_windows_console.py +0 -0
  35. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/agents/_wire_tool_names.py +0 -0
  36. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/agents/agent_code_puppy.py +0 -0
  37. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/agents/agent_creator_agent.py +0 -0
  38. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/agents/agent_helios.py +0 -0
  39. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/agents/agent_manager.py +0 -0
  40. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/agents/agent_model_judge.py +0 -0
  41. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/agents/agent_planning.py +0 -0
  42. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/agents/agent_qa_kitten.py +0 -0
  43. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/agents/agent_web_retriever.py +0 -0
  44. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/agents/base_agent.py +0 -0
  45. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/agents/event_stream_handler.py +0 -0
  46. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/agents/json_agent.py +0 -0
  47. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/agents/retry_checkpoint.py +0 -0
  48. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/agents/retry_profiles.py +0 -0
  49. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/agents/run_stats.py +0 -0
  50. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/agents/smooth_stream.py +0 -0
  51. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/agents/stream_status.py +0 -0
  52. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/agents/subagent_stream_handler.py +0 -0
  53. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/agents/thinking_output.py +0 -0
  54. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/asyncio_cleanup.py +0 -0
  55. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/atomic_io.py +0 -0
  56. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/atomic_json.py +0 -0
  57. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/capabilities/__init__.py +0 -0
  58. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/capabilities/compaction.py +0 -0
  59. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/capabilities/eager_timing.py +0 -0
  60. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/chatgpt_codex_client.py +0 -0
  61. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/claude_cache_client.py +0 -0
  62. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/claude_oauth_transport.py +0 -0
  63. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/cli_runner.py +0 -0
  64. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/command_line/__init__.py +0 -0
  65. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/command_line/add_model_details.py +0 -0
  66. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/command_line/add_model_menu.py +0 -0
  67. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/command_line/add_model_menus.py +0 -0
  68. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/command_line/add_model_vllm.py +0 -0
  69. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/command_line/agent_menu.py +0 -0
  70. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/command_line/attachments.py +0 -0
  71. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/command_line/autosave_menu.py +0 -0
  72. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/command_line/autosave_search.py +0 -0
  73. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/command_line/clipboard.py +0 -0
  74. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/command_line/colors_menu.py +0 -0
  75. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/command_line/command_handler.py +0 -0
  76. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/command_line/command_registry.py +0 -0
  77. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/command_line/completion_cache.py +0 -0
  78. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/command_line/config_apply.py +0 -0
  79. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/command_line/config_commands.py +0 -0
  80. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/command_line/core_commands.py +0 -0
  81. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/command_line/file_index.py +0 -0
  82. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/command_line/file_path_completion.py +0 -0
  83. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/command_line/help_catalog.py +0 -0
  84. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/command_line/help_overlay.py +0 -0
  85. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/command_line/image_utils.py +0 -0
  86. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/command_line/load_context_completion.py +0 -0
  87. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/command_line/mcp/__init__.py +0 -0
  88. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/command_line/mcp/base.py +0 -0
  89. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/command_line/mcp/catalog_server_installer.py +0 -0
  90. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/command_line/mcp/custom_server_form.py +0 -0
  91. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/command_line/mcp/custom_server_installer.py +0 -0
  92. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/command_line/mcp/edit_command.py +0 -0
  93. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/command_line/mcp/handler.py +0 -0
  94. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/command_line/mcp/help_command.py +0 -0
  95. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/command_line/mcp/install_command.py +0 -0
  96. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/command_line/mcp/install_menu.py +0 -0
  97. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/command_line/mcp/list_command.py +0 -0
  98. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/command_line/mcp/logs_command.py +0 -0
  99. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/command_line/mcp/mcp_servers_store.py +0 -0
  100. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/command_line/mcp/remove_command.py +0 -0
  101. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/command_line/mcp/restart_command.py +0 -0
  102. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/command_line/mcp/search_command.py +0 -0
  103. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/command_line/mcp/silence_warning_command.py +0 -0
  104. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/command_line/mcp/start_all_command.py +0 -0
  105. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/command_line/mcp/start_command.py +0 -0
  106. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/command_line/mcp/status_command.py +0 -0
  107. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/command_line/mcp/stop_all_command.py +0 -0
  108. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/command_line/mcp/stop_command.py +0 -0
  109. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/command_line/mcp/trust_command.py +0 -0
  110. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/command_line/mcp/utils.py +0 -0
  111. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/command_line/mcp/wizard_utils.py +0 -0
  112. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/command_line/mcp_binding_menu.py +0 -0
  113. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/command_line/mcp_completion.py +0 -0
  114. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/command_line/menu_session.py +0 -0
  115. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/command_line/model_picker_completion.py +0 -0
  116. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/command_line/model_settings_defs.py +0 -0
  117. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/command_line/model_settings_menu.py +0 -0
  118. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/command_line/onboarding_slides.py +0 -0
  119. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/command_line/onboarding_wizard.py +0 -0
  120. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/command_line/pagination.py +0 -0
  121. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/command_line/pin_command_completion.py +0 -0
  122. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/command_line/refresh_models.py +0 -0
  123. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/command_line/session_browser.py +0 -0
  124. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/command_line/session_browser_data.py +0 -0
  125. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/command_line/session_commands.py +0 -0
  126. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/command_line/set_menu.py +0 -0
  127. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/command_line/set_menu_catalog.py +0 -0
  128. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/command_line/set_menu_schema.py +0 -0
  129. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/command_line/set_menu_shims.py +0 -0
  130. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/command_line/shell_passthrough.py +0 -0
  131. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/command_line/skills_completion.py +0 -0
  132. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/command_line/tui_style.py +0 -0
  133. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/command_line/uc_menu.py +0 -0
  134. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/command_line/utils.py +0 -0
  135. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/config_file.py +0 -0
  136. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/diagnostics.py +0 -0
  137. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/error_logging.py +0 -0
  138. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/events/__init__.py +0 -0
  139. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/events/bridge.py +0 -0
  140. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/file_completion_io.py +0 -0
  141. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/file_completion_tokens.py +0 -0
  142. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/gemini_code_assist.py +0 -0
  143. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/gemini_common.py +0 -0
  144. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/gemini_model.py +0 -0
  145. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/hook_engine/README.md +0 -0
  146. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/hook_engine/__init__.py +0 -0
  147. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/hook_engine/aliases.py +0 -0
  148. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/hook_engine/engine.py +0 -0
  149. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/hook_engine/executor.py +0 -0
  150. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/hook_engine/matcher.py +0 -0
  151. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/hook_engine/models.py +0 -0
  152. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/hook_engine/registry.py +0 -0
  153. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/hook_engine/validator.py +0 -0
  154. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/http_retry.py +0 -0
  155. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/http_utils.py +0 -0
  156. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/httpx2_utils.py +0 -0
  157. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/i18n/__init__.py +0 -0
  158. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/i18n/audit.py +0 -0
  159. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/i18n/catalog.py +0 -0
  160. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/i18n/formats.py +0 -0
  161. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/i18n/interpolation.py +0 -0
  162. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/i18n/locale.py +0 -0
  163. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/i18n/locales/en-US.json +0 -0
  164. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/i18n/locales/es.json +0 -0
  165. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/i18n/locales/fr-CA.json +0 -0
  166. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/i18n/plugin_catalog.py +0 -0
  167. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/i18n/plurals.py +0 -0
  168. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/i18n/pseudo.py +0 -0
  169. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/i18n/translate.py +0 -0
  170. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/kennel_provider.py +0 -0
  171. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/keymap.py +0 -0
  172. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/list_filtering.py +0 -0
  173. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/main.py +0 -0
  174. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/mcp_/__init__.py +0 -0
  175. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/mcp_/agent_bindings.py +0 -0
  176. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/mcp_/async_lifecycle.py +0 -0
  177. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/mcp_/blocking_startup.py +0 -0
  178. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/mcp_/circuit_breaker.py +0 -0
  179. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/mcp_/config_wizard.py +0 -0
  180. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/mcp_/dashboard.py +0 -0
  181. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/mcp_/error_isolation.py +0 -0
  182. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/mcp_/examples/retry_example.py +0 -0
  183. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/mcp_/health_monitor.py +0 -0
  184. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/mcp_/http_auth.py +0 -0
  185. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/mcp_/managed_server.py +0 -0
  186. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/mcp_/manager.py +0 -0
  187. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/mcp_/manager_lifecycle.py +0 -0
  188. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/mcp_/mcp_logs.py +0 -0
  189. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/mcp_/project_config.py +0 -0
  190. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/mcp_/registry.py +0 -0
  191. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/mcp_/retry_manager.py +0 -0
  192. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/mcp_/server_registry_catalog.py +0 -0
  193. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/mcp_/status_tracker.py +0 -0
  194. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/mcp_/system_tools.py +0 -0
  195. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/mcp_/tool_arg_coercion.py +0 -0
  196. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/mcp_/toolset_utils.py +0 -0
  197. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/mcp_prompts/__init__.py +0 -0
  198. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/mcp_prompts/hook_creator.py +0 -0
  199. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/messaging/__init__.py +0 -0
  200. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/messaging/bar_painters.py +0 -0
  201. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/messaging/bar_rendering.py +0 -0
  202. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/messaging/bottom_bar.py +0 -0
  203. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/messaging/bus.py +0 -0
  204. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/messaging/chords.py +0 -0
  205. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/messaging/commands.py +0 -0
  206. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/messaging/editor_actions.py +0 -0
  207. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/messaging/editor_completion.py +0 -0
  208. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/messaging/editor_display.py +0 -0
  209. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/messaging/editor_history.py +0 -0
  210. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/messaging/editor_keys.py +0 -0
  211. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/messaging/editor_paste.py +0 -0
  212. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/messaging/editor_queue.py +0 -0
  213. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/messaging/editor_submission.py +0 -0
  214. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/messaging/external_editor.py +0 -0
  215. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/messaging/identity_line.py +0 -0
  216. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/messaging/idle_status.py +0 -0
  217. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/messaging/inline_bar.py +0 -0
  218. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/messaging/line_editor.py +0 -0
  219. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/messaging/markdown_patches.py +0 -0
  220. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/messaging/menu_lifecycle.py +0 -0
  221. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/messaging/message_queue.py +0 -0
  222. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/messaging/messages.py +0 -0
  223. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/messaging/pause_controller.py +0 -0
  224. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/messaging/prompt_prefix_style.py +0 -0
  225. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/messaging/queue_console.py +0 -0
  226. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/messaging/renderers.py +0 -0
  227. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/messaging/rich_renderer.py +0 -0
  228. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/messaging/run_ui.py +0 -0
  229. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/messaging/run_ui_wiring.py +0 -0
  230. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/messaging/speculation_line.py +0 -0
  231. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/messaging/speculation_stats.py +0 -0
  232. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/messaging/speculation_toggle.py +0 -0
  233. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/messaging/spinner/__init__.py +0 -0
  234. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/messaging/status_line.py +0 -0
  235. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/messaging/subagent_console.py +0 -0
  236. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/messaging/theme_accent.py +0 -0
  237. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/messaging/tool_output.py +0 -0
  238. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/messaging/transcript_guard.py +0 -0
  239. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/model_descriptions.py +0 -0
  240. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/model_factory.py +0 -0
  241. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/model_switching.py +0 -0
  242. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/model_utils.py +0 -0
  243. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/models.json +0 -0
  244. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/models_dev_api.json +0 -0
  245. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/models_dev_parser.py +0 -0
  246. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/observability.py +0 -0
  247. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/platform_utils.py +0 -0
  248. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/plugins/__init__.py +0 -0
  249. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/plugins/config.py +0 -0
  250. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/plugins/oauth_pasteback.py +0 -0
  251. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/plugins/oauth_puppy_html.py +0 -0
  252. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/plugins/trust.py +0 -0
  253. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/plugins/trust_notice.py +0 -0
  254. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/private_inference.py +0 -0
  255. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/provider_credentials.py +0 -0
  256. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/provider_identity.py +0 -0
  257. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/pydantic_patches.py +0 -0
  258. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/reopenable_async_client.py +0 -0
  259. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/round_robin_model.py +0 -0
  260. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/secret_store.py +0 -0
  261. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/secret_store_backends.py +0 -0
  262. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/session_format_migration.py +0 -0
  263. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/session_lifecycle.py +0 -0
  264. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/session_migration.py +0 -0
  265. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/session_storage.py +0 -0
  266. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/session_surrogate_unpickler.py +0 -0
  267. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/shared_credentials.py +0 -0
  268. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/skill_provider.py +0 -0
  269. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/splash.py +0 -0
  270. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/status_display.py +0 -0
  271. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/steer_metadata.py +0 -0
  272. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/terminal_utils.py +0 -0
  273. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/token_usage.py +0 -0
  274. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/tools/__init__.py +0 -0
  275. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/tools/_browser_registry.py +0 -0
  276. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/tools/_lazy.py +0 -0
  277. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/tools/agent_tools.py +0 -0
  278. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/tools/ask_user_question/__init__.py +0 -0
  279. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/tools/ask_user_question/constants.py +0 -0
  280. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/tools/ask_user_question/demo_tui.py +0 -0
  281. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/tools/ask_user_question/handler.py +0 -0
  282. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/tools/ask_user_question/models.py +0 -0
  283. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/tools/ask_user_question/registration.py +0 -0
  284. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/tools/ask_user_question/renderers.py +0 -0
  285. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/tools/ask_user_question/terminal_ui.py +0 -0
  286. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/tools/ask_user_question/theme.py +0 -0
  287. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/tools/ask_user_question/tui_loop.py +0 -0
  288. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/tools/browser/__init__.py +0 -0
  289. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/tools/browser/browser_control.py +0 -0
  290. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/tools/browser/browser_interactions.py +0 -0
  291. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/tools/browser/browser_locator_resolver.py +0 -0
  292. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/tools/browser/browser_locators.py +0 -0
  293. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/tools/browser/browser_manager.py +0 -0
  294. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/tools/browser/browser_navigation.py +0 -0
  295. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/tools/browser/browser_page_snapshot.py +0 -0
  296. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/tools/browser/browser_screenshot.py +0 -0
  297. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/tools/browser/browser_scripts.py +0 -0
  298. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/tools/browser/browser_semantic_interactions.py +0 -0
  299. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/tools/browser/browser_workflows.py +0 -0
  300. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/tools/browser/tool_registry.py +0 -0
  301. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/tools/command_runner.py +0 -0
  302. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/tools/common.py +0 -0
  303. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/tools/display.py +0 -0
  304. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/tools/file_modifications.py +0 -0
  305. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/tools/file_operations.py +0 -0
  306. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/tools/file_permission_state.py +0 -0
  307. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/tools/fs_access.py +0 -0
  308. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/tools/image_tools.py +0 -0
  309. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/tools/io_backends.py +0 -0
  310. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/tools/model_tools.py +0 -0
  311. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/tools/ripgrep.py +0 -0
  312. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/tools/shell_backgrounding.py +0 -0
  313. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/tools/skills_tools.py +0 -0
  314. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/tools/subagent_context.py +0 -0
  315. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/tools/subagent_invocation.py +0 -0
  316. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/tools/subagent_usage_metrics.py +0 -0
  317. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/tools/tools_content.py +0 -0
  318. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/tools/universal_constructor.py +0 -0
  319. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/undo_manager.py +0 -0
  320. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/universal_constructor_provider.py +0 -0
  321. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/version_checker.py +0 -0
  322. {code_puppy-0.0.882 → code_puppy-0.0.883}/code_puppy/zai_model.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: code-puppy
3
- Version: 0.0.882
3
+ Version: 0.0.883
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
@@ -45,6 +45,7 @@ PhaseType = Literal[
45
45
  "register_agents",
46
46
  "register_model_type",
47
47
  "register_skills",
48
+ "register_settings",
48
49
  "register_kennel_memory",
49
50
  "register_cli_args",
50
51
  "handle_cli_args",
@@ -136,6 +137,7 @@ _callbacks: Dict[PhaseType, List[CallbackFunc]] = {
136
137
  "register_agents": [],
137
138
  "register_model_type": [],
138
139
  "register_skills": [],
140
+ "register_settings": [],
139
141
  "register_kennel_memory": [],
140
142
  "register_cli_args": [],
141
143
  "handle_cli_args": [],
@@ -1239,6 +1241,29 @@ def on_register_skills() -> List[Dict[str, Any]]:
1239
1241
  return _trigger_callbacks_sync("register_skills")
1240
1242
 
1241
1243
 
1244
+ def on_register_settings() -> List[Any]:
1245
+ """Collect ``/set`` settings declared by plugins.
1246
+
1247
+ Callback contract: ``() -> SettingsCategory | list[SettingsCategory] | None``
1248
+ (from :mod:`code_puppy.command_line.set_menu_schema`). One declaration
1249
+ feeds both ``/set`` autocomplete and the ``/set`` menu; a category named
1250
+ like a core one (e.g. "Features") merges into it. Anything else returned
1251
+ is ignored with a warning.
1252
+ """
1253
+ from code_puppy.command_line.set_menu_schema import SettingsCategory
1254
+
1255
+ categories: List[Any] = []
1256
+ for result in _trigger_callbacks_sync("register_settings"):
1257
+ if result is None:
1258
+ continue
1259
+ for item in result if isinstance(result, (list, tuple)) else [result]:
1260
+ if isinstance(item, SettingsCategory):
1261
+ categories.append(item)
1262
+ else:
1263
+ logger.warning("Ignoring non-SettingsCategory setting: %r", item)
1264
+ return categories
1265
+
1266
+
1242
1267
  def on_register_kennel_memory() -> List[Any]:
1243
1268
  """Collect kennel memory providers from plugins.
1244
1269
 
@@ -135,11 +135,15 @@ class SetCompleter(Completer):
135
135
  lambda: (get_config_keys, sorted(get_config_keys()))
136
136
  )
137
137
 
138
+ from code_puppy.command_line.set_menu_values import sensitive_keys
139
+
140
+ hidden = {"model", "puppy_token"} | MODEL_SETTINGS_ONLY_KEYS
141
+ secret = sensitive_keys() # complete the key, never echo its value
138
142
  for key in config_keys:
139
- if key in {"model", "puppy_token"} | MODEL_SETTINGS_ONLY_KEYS:
143
+ if key in hidden:
140
144
  continue
141
145
  if key.startswith(text_after_trigger):
142
- prev_value = get_value(key)
146
+ prev_value = None if key in secret else get_value(key)
143
147
  value_part = f" = {prev_value}" if prev_value is not None else " = "
144
148
  completion_text = f"{key}{value_part}"
145
149
 
@@ -0,0 +1,44 @@
1
+ """Facade for the ``/set`` menu's setting registry.
2
+
3
+ The core data lives in :mod:`set_menu_catalog`; plugins add their own via
4
+ the ``register_settings`` hook. This module merges the two so every call
5
+ site sees one registry through :func:`iter_curated_settings`.
6
+ """
7
+
8
+ from __future__ import annotations
9
+
10
+ from typing import Dict, Iterator, List, Tuple
11
+
12
+ from code_puppy.command_line.set_menu_catalog import SETTINGS_CATEGORIES
13
+ from code_puppy.command_line.set_menu_schema import Setting, SettingsCategory
14
+
15
+ __all__ = [
16
+ "Setting",
17
+ "SettingsCategory",
18
+ "SETTINGS_CATEGORIES",
19
+ "iter_curated_settings",
20
+ ]
21
+
22
+
23
+ def _merged_categories() -> List[SettingsCategory]:
24
+ """Core categories, then plugin ones; same-named categories merge in place."""
25
+ from code_puppy.callbacks import on_register_settings
26
+
27
+ merged: Dict[str, List[Setting]] = {}
28
+ for category in (*SETTINGS_CATEGORIES, *on_register_settings()):
29
+ merged.setdefault(category.name, []).extend(category.settings)
30
+ return [SettingsCategory(name, tuple(items)) for name, items in merged.items()]
31
+
32
+
33
+ def iter_curated_settings() -> Iterator[Tuple[SettingsCategory, Setting]]:
34
+ """Yield ``(category, setting)`` pairs for core and plugin settings.
35
+
36
+ Keys are unique: core claims first, then plugins in load order, so a
37
+ plugin can never shadow (or duplicate) a setting core already owns.
38
+ """
39
+ seen: set[str] = set()
40
+ for category in _merged_categories():
41
+ for setting in category.settings:
42
+ if setting.key not in seen:
43
+ seen.add(setting.key)
44
+ yield category, setting
@@ -14,8 +14,8 @@ from __future__ import annotations
14
14
  from typing import Any, Optional
15
15
 
16
16
  from code_puppy.command_line.set_menu_settings import (
17
- SETTINGS_CATEGORIES,
18
17
  Setting,
18
+ iter_curated_settings,
19
19
  )
20
20
  from code_puppy.config import get_value
21
21
 
@@ -23,17 +23,14 @@ _MASK_KEEP_CHARS = 4
23
23
  _MASK_ELLIPSIS = "..."
24
24
 
25
25
 
26
- def _sensitive_keys() -> frozenset[str]:
27
- """Set of curated keys flagged ``sensitive=True``.
26
+ def sensitive_keys() -> frozenset[str]:
27
+ """Set of curated keys (core and plugin) flagged ``sensitive=True``.
28
28
 
29
29
  Deliberately not cached: tests monkey-patch the categories registry,
30
- and the cost is negligible at the curated-setting scale (~20 keys).
30
+ plugins can load late, and the cost is negligible at this scale.
31
31
  """
32
32
  return frozenset(
33
- setting.key
34
- for category in SETTINGS_CATEGORIES
35
- for setting in category.settings
36
- if setting.sensitive
33
+ setting.key for _, setting in iter_curated_settings() if setting.sensitive
37
34
  )
38
35
 
39
36
 
@@ -43,7 +40,7 @@ def is_sensitive_key(key: str) -> bool:
43
40
  Used by the slash-command path to decide whether to mask values in
44
41
  success messages without needing the full :class:`Setting` object.
45
42
  """
46
- return key in _sensitive_keys()
43
+ return key in sensitive_keys()
47
44
 
48
45
 
49
46
  def is_default_value(setting: Setting) -> bool:
@@ -715,9 +715,21 @@ def get_config_keys():
715
715
  config = _load_config()
716
716
  keys = set(config[DEFAULT_SECTION].keys()) if DEFAULT_SECTION in config else set()
717
717
  keys.update(default_keys)
718
+ keys.update(_plugin_setting_keys())
718
719
  return sorted(keys)
719
720
 
720
721
 
722
+ def _plugin_setting_keys() -> set[str]:
723
+ """Keys plugins declare via ``register_settings`` (their own, not core's)."""
724
+ from code_puppy.callbacks import on_register_settings
725
+
726
+ return {
727
+ setting.key
728
+ for category in on_register_settings()
729
+ for setting in category.settings
730
+ }
731
+
732
+
721
733
  def set_config_value(key: str, value: str):
722
734
  """
723
735
  Sets a config value in the persistent config file.
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "code-puppy"
7
- version = "0.0.882"
7
+ version = "0.0.883"
8
8
  description = "Code generation agent"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11,<3.15"
@@ -1,26 +0,0 @@
1
- """Facade for the ``/set`` menu's setting registry.
2
-
3
- The actual data lives in :mod:`set_menu_catalog`. This module is a
4
- thin re-export so existing call sites can keep importing ``Setting``,
5
- ``SettingsCategory``, ``SETTINGS_CATEGORIES``, and
6
- ``iter_curated_settings`` from a single place.
7
- """
8
-
9
- from __future__ import annotations
10
-
11
- from code_puppy.command_line.set_menu_catalog import SETTINGS_CATEGORIES
12
- from code_puppy.command_line.set_menu_schema import Setting, SettingsCategory
13
-
14
- __all__ = [
15
- "Setting",
16
- "SettingsCategory",
17
- "SETTINGS_CATEGORIES",
18
- "iter_curated_settings",
19
- ]
20
-
21
-
22
- def iter_curated_settings():
23
- """Yield ``(category, setting)`` pairs for every curated setting."""
24
- for category in SETTINGS_CATEGORIES:
25
- for setting in category.settings:
26
- yield category, setting
File without changes
File without changes
File without changes