code-puppy 0.0.602__tar.gz → 0.0.604__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.
- {code_puppy-0.0.602 → code_puppy-0.0.604}/PKG-INFO +1 -1
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/__init__.py +181 -73
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/plugin_list/plugins_menu.py +149 -135
- code_puppy-0.0.604/code_puppy/plugins/plugin_list/plugins_menu_layout.py +197 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/plugin_list/plugins_menu_render.py +139 -3
- code_puppy-0.0.604/code_puppy/plugins/plugin_list/project_trust_flow.py +164 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/plugin_list/register_callbacks.py +92 -6
- code_puppy-0.0.604/code_puppy/plugins/puppy_spinner/README.md +92 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/puppy_spinner/__init__.py +4 -0
- code_puppy-0.0.604/code_puppy/plugins/puppy_spinner/builtin_frames.py +172 -0
- code_puppy-0.0.604/code_puppy/plugins/puppy_spinner/commands.py +117 -0
- code_puppy-0.0.604/code_puppy/plugins/puppy_spinner/picker.py +380 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/puppy_spinner/register_callbacks.py +44 -8
- code_puppy-0.0.604/code_puppy/plugins/puppy_spinner/spinners.py +439 -0
- code_puppy-0.0.604/code_puppy/plugins/trust.py +146 -0
- code_puppy-0.0.604/code_puppy/plugins/trust_notice.py +69 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/pyproject.toml +1 -1
- {code_puppy-0.0.602 → code_puppy-0.0.604}/.gitignore +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/LICENSE +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/README.md +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/__init__.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/__main__.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/agents/__init__.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/agents/_builder.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/agents/_compaction.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/agents/_diagnostics.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/agents/_history.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/agents/_key_listeners.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/agents/_non_streaming_render.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/agents/_run_signals.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/agents/_runtime.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/agents/_steer_processor.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/agents/agent_code_puppy.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/agents/agent_creator_agent.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/agents/agent_helios.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/agents/agent_manager.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/agents/agent_planning.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/agents/agent_qa_kitten.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/agents/base_agent.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/agents/event_stream_handler.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/agents/json_agent.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/agents/run_stats.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/agents/smooth_stream.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/agents/subagent_stream_handler.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/callbacks.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/chatgpt_codex_client.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/claude_cache_client.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/cli_runner.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/command_line/__init__.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/command_line/add_model_menu.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/command_line/agent_menu.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/command_line/attachments.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/command_line/autosave_menu.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/command_line/autosave_search.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/command_line/clipboard.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/command_line/colors_menu.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/command_line/command_handler.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/command_line/command_registry.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/command_line/config_apply.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/command_line/config_commands.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/command_line/core_commands.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/command_line/diff_menu.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/command_line/file_index.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/command_line/file_path_completion.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/command_line/judges_menu.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/command_line/load_context_completion.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/command_line/mcp/__init__.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/command_line/mcp/base.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/command_line/mcp/catalog_server_installer.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/command_line/mcp/custom_server_form.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/command_line/mcp/custom_server_installer.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/command_line/mcp/edit_command.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/command_line/mcp/handler.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/command_line/mcp/help_command.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/command_line/mcp/install_command.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/command_line/mcp/install_menu.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/command_line/mcp/list_command.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/command_line/mcp/logs_command.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/command_line/mcp/remove_command.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/command_line/mcp/restart_command.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/command_line/mcp/search_command.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/command_line/mcp/silence_warning_command.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/command_line/mcp/start_all_command.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/command_line/mcp/start_command.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/command_line/mcp/status_command.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/command_line/mcp/stop_all_command.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/command_line/mcp/stop_command.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/command_line/mcp/utils.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/command_line/mcp/wizard_utils.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/command_line/mcp_binding_menu.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/command_line/mcp_completion.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/command_line/model_picker_completion.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/command_line/model_settings_menu.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/command_line/onboarding_slides.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/command_line/onboarding_wizard.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/command_line/pagination.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/command_line/pin_command_completion.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/command_line/prompt_toolkit_completion.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/command_line/session_commands.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/command_line/set_menu.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/command_line/set_menu_catalog.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/command_line/set_menu_render.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/command_line/set_menu_schema.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/command_line/set_menu_settings.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/command_line/set_menu_shims.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/command_line/set_menu_values.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/command_line/shell_passthrough.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/command_line/skills_completion.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/command_line/uc_menu.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/command_line/utils.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/command_line/wiggum_state.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/config.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/error_logging.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/gemini_code_assist.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/gemini_model.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/hook_engine/README.md +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/hook_engine/__init__.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/hook_engine/aliases.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/hook_engine/engine.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/hook_engine/executor.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/hook_engine/matcher.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/hook_engine/models.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/hook_engine/registry.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/hook_engine/validator.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/http_utils.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/keymap.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/list_filtering.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/main.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/mcp_/__init__.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/mcp_/agent_bindings.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/mcp_/async_lifecycle.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/mcp_/blocking_startup.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/mcp_/captured_stdio_server.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/mcp_/circuit_breaker.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/mcp_/config_wizard.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/mcp_/dashboard.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/mcp_/error_isolation.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/mcp_/examples/retry_example.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/mcp_/health_monitor.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/mcp_/managed_server.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/mcp_/manager.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/mcp_/mcp_logs.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/mcp_/registry.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/mcp_/retry_manager.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/mcp_/server_registry_catalog.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/mcp_/status_tracker.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/mcp_/system_tools.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/mcp_/tool_arg_coercion.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/mcp_prompts/__init__.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/mcp_prompts/hook_creator.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/messaging/__init__.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/messaging/bar_painters.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/messaging/bar_rendering.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/messaging/bottom_bar.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/messaging/bus.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/messaging/commands.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/messaging/editor_actions.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/messaging/editor_completion.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/messaging/editor_display.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/messaging/editor_history.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/messaging/editor_keys.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/messaging/editor_paste.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/messaging/line_editor.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/messaging/markdown_patches.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/messaging/message_queue.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/messaging/messages.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/messaging/pause_controller.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/messaging/prompt_prefix_style.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/messaging/queue_console.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/messaging/renderers.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/messaging/rich_renderer.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/messaging/run_ui.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/messaging/run_ui_wiring.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/messaging/spinner/__init__.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/messaging/subagent_console.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/model_descriptions.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/model_factory.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/model_switching.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/model_utils.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/models.json +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/models_dev_api.json +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/models_dev_parser.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/agent_skills/__init__.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/agent_skills/config.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/agent_skills/discovery.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/agent_skills/downloader.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/agent_skills/enabled_skills.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/agent_skills/installer.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/agent_skills/metadata.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/agent_skills/prompt_builder.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/agent_skills/register_callbacks.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/agent_skills/remote_catalog.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/agent_skills/skill_catalog.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/agent_skills/skill_commands.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/agent_skills/skills_install_menu.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/agent_skills/skills_menu.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/aws_bedrock/__init__.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/aws_bedrock/config.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/aws_bedrock/register_callbacks.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/aws_bedrock/utils.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/azure_foundry/README.md +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/azure_foundry/__init__.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/azure_foundry/config.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/azure_foundry/discovery.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/azure_foundry/register_callbacks.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/azure_foundry/token.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/azure_foundry/utils.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/btw/__init__.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/btw/inline_view.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/btw/register_callbacks.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/btw/side_query.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/chatgpt_oauth/__init__.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/chatgpt_oauth/config.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/chatgpt_oauth/oauth_flow.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/chatgpt_oauth/register_callbacks.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/chatgpt_oauth/test_plugin.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/chatgpt_oauth/utils.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/claude_code_hooks/__init__.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/claude_code_hooks/config.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/claude_code_hooks/register_callbacks.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/claude_code_oauth/README.md +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/claude_code_oauth/SETUP.md +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/claude_code_oauth/__init__.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/claude_code_oauth/config.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/claude_code_oauth/fast_mode.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/claude_code_oauth/prompt_handler.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/claude_code_oauth/register_callbacks.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/claude_code_oauth/test_fast_mode.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/claude_code_oauth/test_plugin.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/claude_code_oauth/token_refresh_heartbeat.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/claude_code_oauth/utils.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/code_puppy_agent/SKILL.md +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/code_puppy_agent/__init__.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/code_puppy_agent/register_callbacks.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/config.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/context_indicator/__init__.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/context_indicator/register_callbacks.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/context_indicator/usage.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/copilot_auth/__init__.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/copilot_auth/config.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/copilot_auth/reasoning_client.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/copilot_auth/register_callbacks.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/copilot_auth/utils.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/customizable_commands/__init__.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/customizable_commands/register_callbacks.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/dbos_durable_exec/__init__.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/dbos_durable_exec/cancel.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/dbos_durable_exec/commands.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/dbos_durable_exec/config.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/dbos_durable_exec/lifecycle.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/dbos_durable_exec/register_callbacks.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/dbos_durable_exec/runtime.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/dbos_durable_exec/startup_lock.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/dbos_durable_exec/workflow_ids.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/dbos_durable_exec/wrapper.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/destructive_command_guard/__init__.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/destructive_command_guard/detector.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/destructive_command_guard/register_callbacks.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/emoji_filter/__init__.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/emoji_filter/config.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/emoji_filter/register_callbacks.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/emoji_filter/stripper.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/example_custom_command/README.md +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/example_custom_command/register_callbacks.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/file_permission_handler/__init__.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/file_permission_handler/register_callbacks.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/force_push_guard/__init__.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/force_push_guard/detector.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/force_push_guard/register_callbacks.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/force_push_guard/test_detector.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/frontend_emitter/__init__.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/frontend_emitter/emitter.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/frontend_emitter/register_callbacks.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/frontend_emitter/session_context.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/herdr/README.md +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/herdr/__init__.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/herdr/client.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/herdr/register_callbacks.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/herdr/reporter.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/hook_creator/__init__.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/hook_creator/register_callbacks.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/hook_manager/__init__.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/hook_manager/config.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/hook_manager/hooks_menu.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/hook_manager/register_callbacks.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/oauth_puppy_html.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/obsidian_agent/README.md +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/obsidian_agent/__init__.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/obsidian_agent/agent_obsidian.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/obsidian_agent/register_callbacks.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/ollama/__init__.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/ollama/register_callbacks.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/ollama_setup/__init__.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/ollama_setup/completer.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/ollama_setup/register_callbacks.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/plugin_list/__init__.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/plugin_list/plugin_contributions.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/plugin_list/plugin_meta.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/plugin_list/plugin_text_utils.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/pop_command/__init__.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/pop_command/register_callbacks.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/prompt_newline/__init__.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/prompt_newline/config.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/prompt_newline/register_callbacks.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/prune/__init__.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/prune/prune_menu.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/prune/prune_model.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/prune/prune_render.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/prune/register_callbacks.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/puppy_kennel/README.md +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/puppy_kennel/__init__.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/puppy_kennel/commands.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/puppy_kennel/config.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/puppy_kennel/kennel.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/puppy_kennel/packer.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/puppy_kennel/recorder.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/puppy_kennel/register_callbacks.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/puppy_kennel/retriever.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/puppy_kennel/schema.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/puppy_kennel/state.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/puppy_kennel/tools.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/puppy_kennel/wings.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/quick_resume/__init__.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/quick_resume/register_callbacks.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/review_pr/__init__.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/review_pr/register_callbacks.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/shell_safety/__init__.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/shell_safety/agent_shell_safety.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/shell_safety/command_cache.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/shell_safety/register_callbacks.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/stack_dump/__init__.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/stack_dump/register_callbacks.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/statusline/__init__.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/statusline/config.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/statusline/payload.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/statusline/prompt_patch.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/statusline/register_callbacks.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/statusline/runner.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/statusline/statusline_command.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/steer_queue/__init__.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/steer_queue/queue_menu.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/steer_queue/register_callbacks.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/subagent_panel/README.md +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/subagent_panel/__init__.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/subagent_panel/coalesce_patch.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/subagent_panel/panel_render.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/subagent_panel/register_callbacks.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/subagent_panel/resume_repaint.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/subagent_panel/state.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/switch_agent_resume/__init__.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/switch_agent_resume/register_callbacks.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/theme/README.md +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/theme/__init__.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/theme/bundled_palettes.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/theme/content_styles.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/theme/osc_palette.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/theme/picker.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/theme/register_callbacks.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/theme/rich_themes.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/theme/themes.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/token_ratio_learner/__init__.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/token_ratio_learner/ratios.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/token_ratio_learner/register_callbacks.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/universal_constructor/__init__.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/universal_constructor/models.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/universal_constructor/register_callbacks.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/universal_constructor/registry.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/universal_constructor/sandbox.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/wide_completion_menu/__init__.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/wide_completion_menu/register_callbacks.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/wiggum/__init__.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/wiggum/judge.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/wiggum/judge_config.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/wiggum/register_callbacks.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/plugins/wiggum/state.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/provider_credentials.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/provider_identity.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/pydantic_patches.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/reopenable_async_client.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/round_robin_model.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/session_lifecycle.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/session_migration.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/session_storage.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/status_display.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/summarization_agent.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/terminal_utils.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/tools/__init__.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/tools/agent_tools.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/tools/ask_user_question/__init__.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/tools/ask_user_question/constants.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/tools/ask_user_question/demo_tui.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/tools/ask_user_question/handler.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/tools/ask_user_question/models.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/tools/ask_user_question/registration.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/tools/ask_user_question/renderers.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/tools/ask_user_question/terminal_ui.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/tools/ask_user_question/theme.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/tools/ask_user_question/tui_loop.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/tools/browser/__init__.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/tools/browser/browser_control.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/tools/browser/browser_interactions.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/tools/browser/browser_locator_resolver.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/tools/browser/browser_locators.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/tools/browser/browser_manager.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/tools/browser/browser_navigation.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/tools/browser/browser_page_snapshot.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/tools/browser/browser_screenshot.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/tools/browser/browser_scripts.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/tools/browser/browser_semantic_interactions.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/tools/browser/browser_workflows.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/tools/command_runner.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/tools/common.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/tools/display.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/tools/file_modifications.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/tools/file_operations.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/tools/image_tools.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/tools/model_tools.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/tools/skills_tools.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/tools/subagent_context.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/tools/subagent_invocation.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/tools/tools_content.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/tools/universal_constructor.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/undo_manager.py +0 -0
- {code_puppy-0.0.602 → code_puppy-0.0.604}/code_puppy/version_checker.py +0 -0
|
@@ -6,6 +6,7 @@ import types
|
|
|
6
6
|
from pathlib import Path
|
|
7
7
|
|
|
8
8
|
from code_puppy.callbacks import clear_loading_context, set_loading_context
|
|
9
|
+
from code_puppy.plugins import trust as _trust
|
|
9
10
|
|
|
10
11
|
logger = logging.getLogger(__name__)
|
|
11
12
|
|
|
@@ -19,6 +20,11 @@ _PLUGINS_LOADED = False
|
|
|
19
20
|
# Populated once, then read by get_loaded_plugins().
|
|
20
21
|
_loaded_plugin_names: dict[str, list[str]] = {"builtin": [], "user": [], "project": []}
|
|
21
22
|
|
|
23
|
+
# Status of every discovered project plugin, keyed by name:
|
|
24
|
+
# "loaded" | "untrusted" | "changed" | "disabled" | "error".
|
|
25
|
+
# Read by /plugins UI via get_project_plugin_status().
|
|
26
|
+
_project_plugin_status: dict[str, str] = {}
|
|
27
|
+
|
|
22
28
|
|
|
23
29
|
def _load_builtin_plugins(plugins_dir: Path) -> list[str]:
|
|
24
30
|
"""Load built-in plugins from the package plugins directory.
|
|
@@ -261,23 +267,98 @@ def _ensure_plugin_package(plugin_dir: Path, plugin_name: str) -> bool:
|
|
|
261
267
|
return False
|
|
262
268
|
|
|
263
269
|
|
|
270
|
+
def _load_one_project_plugin(plugin_dir: Path, plugin_name: str) -> bool:
|
|
271
|
+
"""Import a single (already trusted) project plugin.
|
|
272
|
+
|
|
273
|
+
SECURITY: callers MUST verify trust before invoking this — executing
|
|
274
|
+
``register_callbacks.py`` / ``__init__.py`` is arbitrary code execution.
|
|
275
|
+
|
|
276
|
+
The plugins directory is only added to ``sys.path`` here, i.e. after a
|
|
277
|
+
trust decision, so an untrusted repo can never shadow stdlib/third-party
|
|
278
|
+
modules just by existing.
|
|
279
|
+
|
|
280
|
+
Returns True if the plugin executed successfully.
|
|
281
|
+
"""
|
|
282
|
+
callbacks_file = plugin_dir / "register_callbacks.py"
|
|
283
|
+
init_file = plugin_dir / "__init__.py"
|
|
284
|
+
|
|
285
|
+
if not callbacks_file.exists() and not init_file.exists():
|
|
286
|
+
return False
|
|
287
|
+
|
|
288
|
+
# sys.path entry is earned by trust — inserted just-in-time so sibling
|
|
289
|
+
# top-level imports inside the plugin resolve during exec below.
|
|
290
|
+
parent_str = str(plugin_dir.parent)
|
|
291
|
+
if parent_str not in sys.path:
|
|
292
|
+
sys.path.insert(0, parent_str)
|
|
293
|
+
|
|
294
|
+
try:
|
|
295
|
+
if callbacks_file.exists():
|
|
296
|
+
# Register parent package so relative imports resolve
|
|
297
|
+
_ensure_plugin_package(plugin_dir, plugin_name)
|
|
298
|
+
|
|
299
|
+
module_name = f"{_PROJECT_PLUGINS_NS}.{plugin_name}.register_callbacks"
|
|
300
|
+
spec = importlib.util.spec_from_file_location(module_name, callbacks_file)
|
|
301
|
+
if spec is None or spec.loader is None:
|
|
302
|
+
logger.warning(
|
|
303
|
+
f"Could not create module spec for project plugin: {plugin_name}"
|
|
304
|
+
)
|
|
305
|
+
return False
|
|
306
|
+
|
|
307
|
+
module = importlib.util.module_from_spec(spec)
|
|
308
|
+
sys.modules[module_name] = module
|
|
309
|
+
set_loading_context(plugin_name)
|
|
310
|
+
try:
|
|
311
|
+
spec.loader.exec_module(module)
|
|
312
|
+
finally:
|
|
313
|
+
clear_loading_context()
|
|
314
|
+
return True
|
|
315
|
+
|
|
316
|
+
# Fallback to __init__.py (mirrors user plugin behavior)
|
|
317
|
+
set_loading_context(plugin_name)
|
|
318
|
+
try:
|
|
319
|
+
loaded_ok = _ensure_plugin_package(plugin_dir, plugin_name)
|
|
320
|
+
finally:
|
|
321
|
+
clear_loading_context()
|
|
322
|
+
if not loaded_ok:
|
|
323
|
+
logger.warning(
|
|
324
|
+
f"Could not load __init__.py for project plugin: {plugin_name}"
|
|
325
|
+
)
|
|
326
|
+
return loaded_ok
|
|
327
|
+
|
|
328
|
+
except ImportError as e:
|
|
329
|
+
logger.warning(
|
|
330
|
+
f"Failed to import callbacks from project plugin {plugin_name}: {e}"
|
|
331
|
+
)
|
|
332
|
+
return False
|
|
333
|
+
except Exception as e:
|
|
334
|
+
logger.error(
|
|
335
|
+
f"Unexpected error loading project plugin {plugin_name}: {e}",
|
|
336
|
+
exc_info=True,
|
|
337
|
+
)
|
|
338
|
+
return False
|
|
339
|
+
|
|
340
|
+
|
|
264
341
|
def _load_project_plugins(
|
|
265
342
|
project_plugins_dir: Path,
|
|
266
343
|
builtin_names: set[str],
|
|
267
344
|
user_names: set[str],
|
|
268
345
|
) -> list[str]:
|
|
269
|
-
"""Load project plugins from <CWD>/.code_puppy/plugins/.
|
|
346
|
+
"""Load TRUSTED project plugins from <CWD>/.code_puppy/plugins/.
|
|
270
347
|
|
|
271
|
-
|
|
272
|
-
|
|
348
|
+
Project plugins are disabled by default: a plugin is only imported when
|
|
349
|
+
the user previously accepted the risk via the /plugins TUI ceremony AND
|
|
350
|
+
its content hash still matches the accepted hash (see plugins.trust).
|
|
351
|
+
Everything else is recorded in ``_project_plugin_status`` and skipped
|
|
352
|
+
WITHOUT importing — import is code execution.
|
|
273
353
|
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
correctly.
|
|
354
|
+
NOTE: this is deliberately different from the ``disabled_plugins``
|
|
355
|
+
mechanism used by builtin/user tiers (loaded but callbacks skipped).
|
|
356
|
+
Do not "unify" them — non-enabled project plugins must never import.
|
|
278
357
|
|
|
279
358
|
Returns list of successfully loaded plugin names.
|
|
280
359
|
"""
|
|
360
|
+
from code_puppy.plugins.config import is_plugin_disabled
|
|
361
|
+
|
|
281
362
|
loaded = []
|
|
282
363
|
|
|
283
364
|
if not project_plugins_dir.exists():
|
|
@@ -289,9 +370,7 @@ def _load_project_plugins(
|
|
|
289
370
|
)
|
|
290
371
|
return loaded
|
|
291
372
|
|
|
292
|
-
|
|
293
|
-
if project_plugins_str not in sys.path:
|
|
294
|
-
sys.path.insert(0, project_plugins_str)
|
|
373
|
+
project_root = project_plugins_dir.parent.parent
|
|
295
374
|
|
|
296
375
|
# Create the top-level namespace package once
|
|
297
376
|
_ensure_project_ns()
|
|
@@ -304,6 +383,36 @@ def _load_project_plugins(
|
|
|
304
383
|
):
|
|
305
384
|
plugin_name = item.name
|
|
306
385
|
|
|
386
|
+
if (
|
|
387
|
+
not (item / "register_callbacks.py").exists()
|
|
388
|
+
and not (item / "__init__.py").exists()
|
|
389
|
+
):
|
|
390
|
+
continue
|
|
391
|
+
|
|
392
|
+
# Trust gate — fail closed BEFORE any import machinery runs.
|
|
393
|
+
status = _trust.get_trust_status(project_root, plugin_name, item)
|
|
394
|
+
if status != _trust.TRUSTED:
|
|
395
|
+
# Recorded here; surfaced to the human by plugin_list's
|
|
396
|
+
# startup hook (orange banner) once renderers are live.
|
|
397
|
+
# logger.info only — a logger.warning would splat onto
|
|
398
|
+
# stderr above the logo, duplicating the banner.
|
|
399
|
+
_project_plugin_status[plugin_name] = status
|
|
400
|
+
logger.info(
|
|
401
|
+
"Skipping project plugin '%s' (%s). "
|
|
402
|
+
"Review and enable it in the /plugins TUI.",
|
|
403
|
+
plugin_name,
|
|
404
|
+
status,
|
|
405
|
+
)
|
|
406
|
+
continue
|
|
407
|
+
|
|
408
|
+
if is_plugin_disabled(plugin_name):
|
|
409
|
+
_project_plugin_status[plugin_name] = "disabled"
|
|
410
|
+
logger.info(
|
|
411
|
+
"Project plugin '%s' is trusted but disabled — not loading",
|
|
412
|
+
plugin_name,
|
|
413
|
+
)
|
|
414
|
+
continue
|
|
415
|
+
|
|
307
416
|
# Warn if a project plugin shadows a builtin (user collisions
|
|
308
417
|
# are handled earlier by skipping the user plugin entirely).
|
|
309
418
|
if plugin_name in builtin_names:
|
|
@@ -311,65 +420,11 @@ def _load_project_plugins(
|
|
|
311
420
|
f"Project plugin '{plugin_name}' shadows builtin plugin of the same name"
|
|
312
421
|
)
|
|
313
422
|
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
try:
|
|
318
|
-
# Register parent package so relative imports resolve
|
|
319
|
-
_ensure_plugin_package(item, plugin_name)
|
|
320
|
-
|
|
321
|
-
module_name = (
|
|
322
|
-
f"{_PROJECT_PLUGINS_NS}.{plugin_name}.register_callbacks"
|
|
323
|
-
)
|
|
324
|
-
spec = importlib.util.spec_from_file_location(
|
|
325
|
-
module_name, callbacks_file
|
|
326
|
-
)
|
|
327
|
-
if spec is None or spec.loader is None:
|
|
328
|
-
logger.warning(
|
|
329
|
-
f"Could not create module spec for project plugin: {plugin_name}"
|
|
330
|
-
)
|
|
331
|
-
continue
|
|
332
|
-
|
|
333
|
-
module = importlib.util.module_from_spec(spec)
|
|
334
|
-
sys.modules[module_name] = module
|
|
335
|
-
set_loading_context(plugin_name)
|
|
336
|
-
try:
|
|
337
|
-
spec.loader.exec_module(module)
|
|
338
|
-
finally:
|
|
339
|
-
clear_loading_context()
|
|
340
|
-
loaded.append(plugin_name)
|
|
341
|
-
|
|
342
|
-
except ImportError as e:
|
|
343
|
-
logger.warning(
|
|
344
|
-
f"Failed to import callbacks from project plugin {plugin_name}: {e}"
|
|
345
|
-
)
|
|
346
|
-
except Exception as e:
|
|
347
|
-
logger.error(
|
|
348
|
-
f"Unexpected error loading project plugin {plugin_name}: {e}",
|
|
349
|
-
exc_info=True,
|
|
350
|
-
)
|
|
423
|
+
if _load_one_project_plugin(item, plugin_name):
|
|
424
|
+
loaded.append(plugin_name)
|
|
425
|
+
_project_plugin_status[plugin_name] = "loaded"
|
|
351
426
|
else:
|
|
352
|
-
|
|
353
|
-
init_file = item / "__init__.py"
|
|
354
|
-
if init_file.exists():
|
|
355
|
-
try:
|
|
356
|
-
set_loading_context(plugin_name)
|
|
357
|
-
try:
|
|
358
|
-
loaded_ok = _ensure_plugin_package(item, plugin_name)
|
|
359
|
-
finally:
|
|
360
|
-
clear_loading_context()
|
|
361
|
-
if loaded_ok:
|
|
362
|
-
loaded.append(plugin_name)
|
|
363
|
-
else:
|
|
364
|
-
logger.warning(
|
|
365
|
-
f"Could not load __init__.py for project plugin: {plugin_name}"
|
|
366
|
-
)
|
|
367
|
-
|
|
368
|
-
except Exception as e:
|
|
369
|
-
logger.error(
|
|
370
|
-
f"Unexpected error loading project plugin {plugin_name}: {e}",
|
|
371
|
-
exc_info=True,
|
|
372
|
-
)
|
|
427
|
+
_project_plugin_status[plugin_name] = "error"
|
|
373
428
|
|
|
374
429
|
return loaded
|
|
375
430
|
|
|
@@ -416,12 +471,18 @@ def load_plugin_callbacks() -> dict[str, list[str]]:
|
|
|
416
471
|
|
|
417
472
|
# Pre-scan project plugin names so we can skip user plugins that the
|
|
418
473
|
# project tier will supersede (project wins, matching agents dedup).
|
|
474
|
+
# SECURITY: only TRUSTED project plugins participate in dedup — otherwise
|
|
475
|
+
# an untrusted repo could knock out user plugins (e.g. force_push_guard)
|
|
476
|
+
# just by squatting on their names.
|
|
419
477
|
project_plugins_dir = get_project_plugins_directory()
|
|
420
|
-
project_plugin_names = (
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
478
|
+
project_plugin_names: set[str] = set()
|
|
479
|
+
if project_plugins_dir is not None:
|
|
480
|
+
project_root = project_plugins_dir.parent.parent
|
|
481
|
+
project_plugin_names = {
|
|
482
|
+
name
|
|
483
|
+
for name in _scan_plugin_names(project_plugins_dir)
|
|
484
|
+
if _trust.is_plugin_trusted(project_root, name, project_plugins_dir / name)
|
|
485
|
+
}
|
|
425
486
|
|
|
426
487
|
builtin_loaded = _load_builtin_plugins(plugins_dir)
|
|
427
488
|
user_skip_names = set(builtin_loaded) | project_plugin_names
|
|
@@ -463,6 +524,53 @@ def get_loaded_plugins() -> dict[str, list[str]]:
|
|
|
463
524
|
return dict(_loaded_plugin_names)
|
|
464
525
|
|
|
465
526
|
|
|
527
|
+
def get_project_plugin_status() -> dict[str, str]:
|
|
528
|
+
"""Return status of every discovered project plugin.
|
|
529
|
+
|
|
530
|
+
Maps plugin name to one of ``loaded``, ``untrusted``, ``changed``,
|
|
531
|
+
``disabled``, or ``error``. Used by the /plugins UI to surface
|
|
532
|
+
project plugins that were skipped by the trust gate.
|
|
533
|
+
"""
|
|
534
|
+
return dict(_project_plugin_status)
|
|
535
|
+
|
|
536
|
+
|
|
537
|
+
def load_project_plugin_now(plugin_name: str) -> bool:
|
|
538
|
+
"""Hot-load a single project plugin after the user granted trust.
|
|
539
|
+
|
|
540
|
+
Re-checks the trust store (fail closed) so callers can't accidentally
|
|
541
|
+
load an unaccepted plugin. Registers callbacks immediately — no
|
|
542
|
+
restart required.
|
|
543
|
+
"""
|
|
544
|
+
project_plugins_dir = get_project_plugins_directory()
|
|
545
|
+
if project_plugins_dir is None:
|
|
546
|
+
return False
|
|
547
|
+
|
|
548
|
+
plugin_dir = project_plugins_dir / plugin_name
|
|
549
|
+
if not plugin_dir.is_dir():
|
|
550
|
+
return False
|
|
551
|
+
|
|
552
|
+
project_root = project_plugins_dir.parent.parent
|
|
553
|
+
if not _trust.is_plugin_trusted(project_root, plugin_name, plugin_dir):
|
|
554
|
+
logger.warning(
|
|
555
|
+
"Refusing to hot-load project plugin '%s' — not trusted", plugin_name
|
|
556
|
+
)
|
|
557
|
+
return False
|
|
558
|
+
|
|
559
|
+
if plugin_name in _loaded_plugin_names["project"]:
|
|
560
|
+
# Already imported this session; callbacks are registered.
|
|
561
|
+
_project_plugin_status[plugin_name] = "loaded"
|
|
562
|
+
return True
|
|
563
|
+
|
|
564
|
+
_ensure_project_ns()
|
|
565
|
+
if _load_one_project_plugin(plugin_dir, plugin_name):
|
|
566
|
+
_loaded_plugin_names["project"].append(plugin_name)
|
|
567
|
+
_project_plugin_status[plugin_name] = "loaded"
|
|
568
|
+
return True
|
|
569
|
+
|
|
570
|
+
_project_plugin_status[plugin_name] = "error"
|
|
571
|
+
return False
|
|
572
|
+
|
|
573
|
+
|
|
466
574
|
def get_user_plugins_dir() -> Path:
|
|
467
575
|
"""Return the path to the user plugins directory."""
|
|
468
576
|
return USER_PLUGINS_DIR
|