code-puppy-core-plugins 0.0.53__tar.gz → 0.0.54__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_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/PKG-INFO +1 -1
- code_puppy_core_plugins-0.0.54/code_puppy_core_plugins/mcp_binding_prompt/README.md +32 -0
- code_puppy_core_plugins-0.0.54/code_puppy_core_plugins/mcp_binding_prompt/__init__.py +1 -0
- code_puppy_core_plugins-0.0.54/code_puppy_core_plugins/mcp_binding_prompt/custom_install.py +58 -0
- code_puppy_core_plugins-0.0.54/code_puppy_core_plugins/mcp_binding_prompt/http_form.py +223 -0
- code_puppy_core_plugins-0.0.54/code_puppy_core_plugins/mcp_binding_prompt/register_callbacks.py +48 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/plugin_list/plugins_menu.py +6 -16
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/plugin_list/plugins_menu_render.py +1 -14
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/pyproject.toml +2 -1
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/.gitignore +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/LICENSE +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/README.md +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/acp/README.md +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/acp/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/acp/agent.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/acp/bridge.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/acp/capabilities.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/acp/commands.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/acp/content.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/acp/io_delegation.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/acp/mcp_config.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/acp/permissions.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/acp/persistence.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/acp/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/acp/replay.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/acp/session.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/acp/session_config.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/acp/state.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/agent_creator_skill/SKILL.md +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/agent_creator_skill/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/agent_creator_skill/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/agent_skills/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/agent_skills/config.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/agent_skills/discovery.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/agent_skills/downloader.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/agent_skills/enabled_skills.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/agent_skills/installer.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/agent_skills/metadata.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/agent_skills/prompt_builder.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/agent_skills/provider.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/agent_skills/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/agent_skills/remote_catalog.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/agent_skills/skill_catalog.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/agent_skills/skill_commands.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/agent_skills/skills_install_menu.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/agent_skills/skills_menu.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/auto_continue/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/auto_continue/classifier.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/auto_continue/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/aws_bedrock/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/aws_bedrock/config.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/aws_bedrock/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/aws_bedrock/utils.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/azure_foundry/README.md +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/azure_foundry/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/azure_foundry/config.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/azure_foundry/discovery.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/azure_foundry/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/azure_foundry/token.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/azure_foundry/utils.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/background_agents/README.md +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/background_agents/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/background_agents/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/btw/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/btw/inline_view.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/btw/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/btw/side_query.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/chatgpt_oauth/IMAGEGEN_SKILL.md +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/chatgpt_oauth/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/chatgpt_oauth/config.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/chatgpt_oauth/image_generation.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/chatgpt_oauth/image_tool.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/chatgpt_oauth/model_catalog.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/chatgpt_oauth/oauth_flow.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/chatgpt_oauth/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/chatgpt_oauth/test_plugin.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/chatgpt_oauth/usage.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/chatgpt_oauth/utils.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/claude_code_hooks/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/claude_code_hooks/config.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/claude_code_hooks/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/claude_code_hooks/trust.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/claude_code_oauth/README.md +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/claude_code_oauth/SETUP.md +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/claude_code_oauth/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/claude_code_oauth/config.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/claude_code_oauth/fast_mode.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/claude_code_oauth/model_filter.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/claude_code_oauth/model_provider.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/claude_code_oauth/prompt_handler.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/claude_code_oauth/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/claude_code_oauth/runtime_credentials.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/claude_code_oauth/test_plugin.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/claude_code_oauth/token_refresh_heartbeat.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/claude_code_oauth/token_store.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/claude_code_oauth/utils.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/code_puppy_agent/AGENTS_AND_TOOLS.md +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/code_puppy_agent/MODELS_AND_MCP.md +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/code_puppy_agent/PLUGINS_AND_CALLBACKS.md +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/code_puppy_agent/SESSIONS_AND_HISTORY.md +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/code_puppy_agent/SKILL.md +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/code_puppy_agent/SKILLS_SYSTEM.md +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/code_puppy_agent/SYSTEM_PROMPT_CONFIG_AND_I18N.md +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/code_puppy_agent/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/code_puppy_agent/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/completion_notification/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/completion_notification/config.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/completion_notification/locales/en-US.json +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/completion_notification/locales/es.json +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/completion_notification/locales/fr-CA.json +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/completion_notification/notifier.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/completion_notification/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/computer_use/NativeCapture.swift +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/computer_use/README.md +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/computer_use/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/computer_use/accessibility.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/computer_use/activation.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/computer_use/backend.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/computer_use/backend_types.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/computer_use/capture.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/computer_use/commands.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/computer_use/geometry.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/computer_use/inline_image.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/computer_use/keycodes.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/computer_use/policy.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/computer_use/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/computer_use/safety.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/computer_use/settle.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/computer_use/state.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/computer_use/tools.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/context_indicator/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/context_indicator/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/context_indicator/usage.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/copilot_auth/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/copilot_auth/config.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/copilot_auth/reasoning_client.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/copilot_auth/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/copilot_auth/responses_stream.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/copilot_auth/utils.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/customizable_commands/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/customizable_commands/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/dbos_durable_exec/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/dbos_durable_exec/cancel.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/dbos_durable_exec/commands.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/dbos_durable_exec/config.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/dbos_durable_exec/lifecycle.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/dbos_durable_exec/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/dbos_durable_exec/runtime.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/dbos_durable_exec/startup_lock.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/dbos_durable_exec/workflow_ids.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/dbos_durable_exec/wrapper.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/destructive_command_guard/AGENTS.md +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/destructive_command_guard/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/destructive_command_guard/detector.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/destructive_command_guard/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/emoji_filter/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/emoji_filter/config.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/emoji_filter/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/emoji_filter/stripper.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/empty_html_comment_filter/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/example_custom_command/README.md +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/example_custom_command/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/file_permission_handler/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/file_permission_handler/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/flux_bootstrap/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/_docs/README.md +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/_docs/cheatsheet.md +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/_docs/pipeline.md +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/_docs/synopsis.md +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/about.md +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/address-feedback.md +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/ask.md +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/aug.md +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/auto-pilot.md +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/cheatsheet.md +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/commit.md +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/config.md +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/create-pr.md +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/exec.md +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/new.md +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/qa.md +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/rebase.md +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/review.md +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/split.md +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/squash-commits.md +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/status.md +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/tests.md +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/flux_bootstrap/bundled/scripts/flux_about.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/flux_bootstrap/bundled/scripts/flux_cheatsheet.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/flux_bootstrap/bundled/scripts/flux_status.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/flux_bootstrap/installer.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/flux_bootstrap/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/force_push_guard/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/force_push_guard/detector.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/force_push_guard/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/fork/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/fork/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/frontend_emitter/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/frontend_emitter/emitter.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/frontend_emitter/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/frontend_emitter/session_context.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/grok_oauth/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/grok_oauth/config.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/grok_oauth/oauth_flow.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/grok_oauth/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/grok_oauth/utils.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/herdr/README.md +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/herdr/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/herdr/client.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/herdr/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/herdr/reporter.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/herdr/smoke.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/herdr/sources.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/hook_creator/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/hook_creator/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/hook_manager/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/hook_manager/config.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/hook_manager/hooks_menu.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/hook_manager/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/hook_manager/trust_handler.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/logfire_oauth/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/logfire_oauth/oauth.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/logfire_oauth/query_tool.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/logfire_oauth/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/logfire_sessions/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/logfire_sessions/mirror.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/logfire_sessions/query.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/logfire_sessions/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/logfire_sessions/sync.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/meta_oauth/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/meta_oauth/config.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/meta_oauth/oauth_flow.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/meta_oauth/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/meta_oauth/utils.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/namespace_skill_search/README.md +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/namespace_skill_search/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/namespace_skill_search/namespaces.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/namespace_skill_search/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/namespace_skill_search/search_tool.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/no_tools/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/no_tools/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/oauth_pasteback.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/oauth_puppy_html.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/obsidian_agent/README.md +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/obsidian_agent/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/obsidian_agent/agent_obsidian.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/obsidian_agent/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/ollama/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/ollama/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/ollama_setup/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/ollama_setup/completer.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/ollama_setup/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/openrouter_oauth/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/openrouter_oauth/config.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/openrouter_oauth/oauth_flow.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/openrouter_oauth/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/openrouter_oauth/test_plugin.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/plugin_list/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/plugin_list/plugin_contributions.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/plugin_list/plugin_meta.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/plugin_list/plugin_text_utils.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/plugin_list/project_trust_flow.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/plugin_list/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/pop_command/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/pop_command/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/profiles/README.md +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/profiles/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/profiles/config.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/profiles/locales/en-US.json +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/profiles/menu.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/profiles/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/prompt_newline/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/prompt_newline/config.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/prompt_newline/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/prune/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/prune/prune_menu.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/prune/prune_model.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/prune/prune_render.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/prune/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/puppy_kennel/README.md +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/puppy_kennel/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/puppy_kennel/commands.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/puppy_kennel/config.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/puppy_kennel/kennel.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/puppy_kennel/packer.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/puppy_kennel/recorder.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/puppy_kennel/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/puppy_kennel/retriever.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/puppy_kennel/schema.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/puppy_kennel/state.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/puppy_kennel/tools.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/puppy_kennel/wings.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/puppy_spinner/README.md +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/puppy_spinner/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/puppy_spinner/builtin_frames.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/puppy_spinner/commands.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/puppy_spinner/picker.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/puppy_spinner/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/puppy_spinner/spinners.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/qa_kitten_skill/SKILL.md +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/qa_kitten_skill/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/qa_kitten_skill/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/quick_resume/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/quick_resume/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/review_pr/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/review_pr/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/session_namer/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/session_namer/namer.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/session_namer/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/spill/LICENSE.deepseek +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/spill/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/spill/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/spill/store.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/stack_dump/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/stack_dump/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/statusline/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/statusline/config.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/statusline/payload.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/statusline/prompt_patch.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/statusline/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/statusline/runner.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/statusline/statusline_command.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/steer_queue/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/steer_queue/queue_menu.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/steer_queue/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/subagent_panel/README.md +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/subagent_panel/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/subagent_panel/coalesce_patch.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/subagent_panel/panel_render.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/subagent_panel/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/subagent_panel/resume_repaint.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/subagent_panel/state.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/switch_agent_resume/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/switch_agent_resume/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/termflow_tui.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/theme/README.md +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/theme/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/theme/bundled_palettes.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/theme/content_styles.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/theme/osc_palette.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/theme/picker.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/theme/prompt_toolkit_theme.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/theme/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/theme/rich_themes.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/theme/themes.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/timestamp_heartbeat/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/timestamp_heartbeat/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/token_ratio_learner/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/token_ratio_learner/ratios.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/token_ratio_learner/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/universal_constructor/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/universal_constructor/models.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/universal_constructor/provider.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/universal_constructor/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/universal_constructor/registry.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/universal_constructor/sandbox.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/web_retriever_skill/SKILL.md +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/web_retriever_skill/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/web_retriever_skill/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/wiggum/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/wiggum/goal_runs.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/wiggum/judge.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/wiggum/judge_config.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/wiggum/judges_menu.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/wiggum/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/wiggum/state.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/yolo_cli/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.53 → code_puppy_core_plugins-0.0.54}/code_puppy_core_plugins/yolo_cli/register_callbacks.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: code-puppy-core-plugins
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.54
|
|
4
4
|
Summary: Official plugin bundle for Code Puppy
|
|
5
5
|
Project-URL: Repository, https://github.com/mpfaffenberger/code_puppy_core_plugins
|
|
6
6
|
Project-URL: Homepage, https://github.com/mpfaffenberger/code_puppy_core_plugins
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# mcp_binding_prompt
|
|
2
|
+
|
|
3
|
+
Three MCP-install affordances layered over core at `startup`, no core edits:
|
|
4
|
+
|
|
5
|
+
1. **Synchronous post-install binding prompt.** Core's installers call
|
|
6
|
+
`mcp_binding_menu.prompt_bind_after_install_sync(server_name)` inside a
|
|
7
|
+
`try/except ImportError` -- without this plugin the call silently no-ops.
|
|
8
|
+
`register_callbacks.py` provides that function: it runs the existing
|
|
9
|
+
`build_post_install_menu` inline in the installer's foreground (inside
|
|
10
|
+
`menu_session()`, with `set_awaiting_user_input` toggled) instead of
|
|
11
|
+
scheduling a competing UI task.
|
|
12
|
+
2. **`/mcp install` is custom-JSON only** (`custom_install.py`). The bundled
|
|
13
|
+
marketplace is gone: `InstallCommand.execute` opens the custom server form
|
|
14
|
+
directly, `SearchCommand.execute` explains the removal, `HelpCommand.execute`
|
|
15
|
+
prints the trimmed help, and `MCPCompleter` stops advertising `search`.
|
|
16
|
+
3. **HTTP form fields** (`http_form.py`). When the custom form's type is
|
|
17
|
+
`http`, `run_form_flow`'s `menu_factory` is swapped for `HTTPMenu`, which
|
|
18
|
+
exposes URL / auth (none, OAuth, headers) / headers as proper fields on
|
|
19
|
+
top of the raw JSON blob. Saving validates the URL (scheme, host, no
|
|
20
|
+
embedded credentials or whitespace), the headers (string keys/values, no
|
|
21
|
+
CRLF), and runs the config through core's `http_auth` transport policy.
|
|
22
|
+
Malformed advanced JSON falls back to the core menu so it stays editable.
|
|
23
|
+
Switching type to `http` with an untouched example seeds a minimal config.
|
|
24
|
+
|
|
25
|
+
All strings go through `code_puppy.i18n` (`mcp.custom_install.*`,
|
|
26
|
+
`mcp.http_form.*`); the keys live in core's `en-US` catalog.
|
|
27
|
+
|
|
28
|
+
## Notes
|
|
29
|
+
|
|
30
|
+
- Every patch is idempotent (`_custom_json_install` / `_http_fields` markers).
|
|
31
|
+
- `HelpCommand.execute` is fully replaced, so new core `/mcp` subcommands must
|
|
32
|
+
also be added to the `mcp.custom_install.help` catalog string.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""Restore the synchronous post-install MCP binding prompt."""
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"""Custom JSON replaces the bundled MCP marketplace at the command boundary."""
|
|
2
|
+
|
|
3
|
+
import logging
|
|
4
|
+
from functools import wraps
|
|
5
|
+
|
|
6
|
+
from code_puppy.i18n import t
|
|
7
|
+
from code_puppy.messaging import emit_error, emit_info
|
|
8
|
+
|
|
9
|
+
logger = logging.getLogger(__name__)
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def install_custom(command, args, group_id=None):
|
|
13
|
+
"""Keep the existing form's save, cancel, and binding semantics."""
|
|
14
|
+
from code_puppy.command_line.mcp.custom_server_form import run_custom_server_form
|
|
15
|
+
|
|
16
|
+
try:
|
|
17
|
+
run_custom_server_form(command.manager)
|
|
18
|
+
except (KeyboardInterrupt, EOFError):
|
|
19
|
+
return
|
|
20
|
+
except Exception as exc:
|
|
21
|
+
logger.exception("Custom MCP installation failed")
|
|
22
|
+
emit_error(
|
|
23
|
+
t("mcp.custom_install.failed", error=str(exc)), message_group=group_id
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def marketplace_removed(command, args, group_id=None):
|
|
28
|
+
emit_info(t("mcp.custom_install.no_marketplace"), message_group=group_id)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def custom_help(command, args, group_id=None):
|
|
32
|
+
emit_info(t("mcp.custom_install.help"), message_group=group_id)
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def install_routes():
|
|
36
|
+
# Known slash commands do not reach custom_command. Install the override
|
|
37
|
+
# at startup, leaving core command_line files and existing instances intact.
|
|
38
|
+
from code_puppy.command_line.mcp.install_command import InstallCommand
|
|
39
|
+
from code_puppy.command_line.mcp.search_command import SearchCommand
|
|
40
|
+
from code_puppy.command_line.mcp.help_command import HelpCommand
|
|
41
|
+
from code_puppy.command_line.mcp_completion import MCPCompleter
|
|
42
|
+
|
|
43
|
+
original = MCPCompleter.__init__
|
|
44
|
+
if getattr(original, "_custom_json_install", False):
|
|
45
|
+
return # already routed -- never double-wrap the completer
|
|
46
|
+
InstallCommand.execute = install_custom
|
|
47
|
+
SearchCommand.execute = marketplace_removed
|
|
48
|
+
HelpCommand.execute = custom_help
|
|
49
|
+
|
|
50
|
+
@wraps(original)
|
|
51
|
+
def initialize(completer, *args, **kwargs):
|
|
52
|
+
original(completer, *args, **kwargs)
|
|
53
|
+
for commands in (completer.general_subcommands, completer.all_subcommands):
|
|
54
|
+
commands.pop("search", None)
|
|
55
|
+
commands["install"] = t("mcp.custom_install.description")
|
|
56
|
+
|
|
57
|
+
initialize._custom_json_install = True
|
|
58
|
+
MCPCompleter.__init__ = initialize
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
"""HTTP fields layered over the existing custom form and persistence loop."""
|
|
2
|
+
|
|
3
|
+
import json
|
|
4
|
+
from urllib.parse import urlsplit
|
|
5
|
+
|
|
6
|
+
from code_puppy.i18n import t
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def read_config(form):
|
|
10
|
+
config = json.loads(form.json_config)
|
|
11
|
+
if not isinstance(config, dict):
|
|
12
|
+
raise ValueError(t("mcp.http_form.object_required"))
|
|
13
|
+
return config
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def validate_headers(headers):
|
|
17
|
+
"""Non-empty string keys, string values, no CRLF (header injection)."""
|
|
18
|
+
if not isinstance(headers, dict) or any(
|
|
19
|
+
not isinstance(key, str)
|
|
20
|
+
or not isinstance(value, str)
|
|
21
|
+
or not key
|
|
22
|
+
or any(char in key + value for char in "\r\n")
|
|
23
|
+
for key, value in headers.items()
|
|
24
|
+
):
|
|
25
|
+
raise ValueError(t("mcp.http_form.invalid_headers"))
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def validate_config(config):
|
|
29
|
+
url = config.get("url", "")
|
|
30
|
+
if not isinstance(url, str):
|
|
31
|
+
raise ValueError(t("mcp.http_form.invalid_url"))
|
|
32
|
+
parsed = urlsplit(url)
|
|
33
|
+
if (
|
|
34
|
+
parsed.scheme not in ("https", "http")
|
|
35
|
+
or not parsed.hostname
|
|
36
|
+
or parsed.username is not None
|
|
37
|
+
or parsed.password is not None
|
|
38
|
+
or any(char.isspace() for char in url)
|
|
39
|
+
):
|
|
40
|
+
raise ValueError(t("mcp.http_form.invalid_url"))
|
|
41
|
+
headers = config.get("headers", {})
|
|
42
|
+
validate_headers(headers)
|
|
43
|
+
from code_puppy.mcp_.http_auth import http_auth
|
|
44
|
+
|
|
45
|
+
# Reuse transport security policy; constructing OAuth does not start login.
|
|
46
|
+
http_auth(config, url, headers)
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def save_config(form, config):
|
|
50
|
+
form.json_config = json.dumps(config, indent=2)
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def input_text(title, initial):
|
|
54
|
+
from termflow.tui import TextInputBuilder
|
|
55
|
+
from code_puppy.command_line.tui_style import menu_style
|
|
56
|
+
|
|
57
|
+
builder = TextInputBuilder(title).initial(initial).alt_screen(False)
|
|
58
|
+
style = menu_style()
|
|
59
|
+
if style is not None:
|
|
60
|
+
builder.style(style)
|
|
61
|
+
result = builder.build().run()
|
|
62
|
+
return None if result.cancelled else result.value
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
def choose_auth(config):
|
|
66
|
+
from termflow.tui import MenuBuilder, MenuItem
|
|
67
|
+
from code_puppy.command_line.tui_style import themed
|
|
68
|
+
|
|
69
|
+
result = (
|
|
70
|
+
themed(
|
|
71
|
+
MenuBuilder(t("mcp.http_form.auth"))
|
|
72
|
+
.items(
|
|
73
|
+
[
|
|
74
|
+
MenuItem(t("mcp.http_form.none"), value="none"),
|
|
75
|
+
MenuItem(t("mcp.http_form.oauth"), value="oauth"),
|
|
76
|
+
MenuItem(t("mcp.http_form.headers_auth"), value="headers"),
|
|
77
|
+
]
|
|
78
|
+
)
|
|
79
|
+
.alt_screen(False)
|
|
80
|
+
)
|
|
81
|
+
.build()
|
|
82
|
+
.run()
|
|
83
|
+
)
|
|
84
|
+
if result.cancelled or result.item is None:
|
|
85
|
+
return False
|
|
86
|
+
if result.item.value == "oauth":
|
|
87
|
+
config["auth"] = "oauth"
|
|
88
|
+
# New OAuth selections need time for a human to finish browser login.
|
|
89
|
+
if config.get("timeout", 30) == 30:
|
|
90
|
+
config["timeout"] = 330
|
|
91
|
+
else:
|
|
92
|
+
config.pop("auth", None)
|
|
93
|
+
if result.item.value == "none":
|
|
94
|
+
headers = config.get("headers", {})
|
|
95
|
+
config["headers"] = {
|
|
96
|
+
key: val for key, val in headers.items() if key.lower() != "authorization"
|
|
97
|
+
}
|
|
98
|
+
if result.item.value == "headers":
|
|
99
|
+
return edit_headers(config)
|
|
100
|
+
return True
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
def edit_headers(config):
|
|
104
|
+
value = input_text(
|
|
105
|
+
t("mcp.http_form.headers_prompt"), json.dumps(config.get("headers", {}))
|
|
106
|
+
)
|
|
107
|
+
if value is None:
|
|
108
|
+
return False
|
|
109
|
+
try:
|
|
110
|
+
headers = json.loads(value or "{}")
|
|
111
|
+
except ValueError:
|
|
112
|
+
# A JSONDecodeError message is noise in the footer; say what we mean.
|
|
113
|
+
raise ValueError(t("mcp.http_form.invalid_headers")) from None
|
|
114
|
+
validate_headers(headers)
|
|
115
|
+
if headers:
|
|
116
|
+
config["headers"] = headers
|
|
117
|
+
else:
|
|
118
|
+
config.pop("headers", None)
|
|
119
|
+
return True
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
class HTTPMenu:
|
|
123
|
+
def __init__(self, form, original, overrides):
|
|
124
|
+
self.form = form
|
|
125
|
+
self.original = original
|
|
126
|
+
self.overrides = overrides
|
|
127
|
+
|
|
128
|
+
def run(self):
|
|
129
|
+
from termflow.tui import MenuBuilder, MenuItem
|
|
130
|
+
from code_puppy.command_line.tui_style import themed
|
|
131
|
+
|
|
132
|
+
form = self.form
|
|
133
|
+
while True:
|
|
134
|
+
try:
|
|
135
|
+
config = read_config(form)
|
|
136
|
+
except (ValueError, TypeError):
|
|
137
|
+
# Advanced malformed JSON remains editable, never discarded.
|
|
138
|
+
return self.original(form, **self.overrides).run()
|
|
139
|
+
auth = (
|
|
140
|
+
"oauth"
|
|
141
|
+
if config.get("auth") == "oauth"
|
|
142
|
+
else (
|
|
143
|
+
"headers_auth"
|
|
144
|
+
if any(
|
|
145
|
+
key.lower() == "authorization"
|
|
146
|
+
for key in config.get("headers", {})
|
|
147
|
+
)
|
|
148
|
+
else "none"
|
|
149
|
+
)
|
|
150
|
+
)
|
|
151
|
+
items = [
|
|
152
|
+
MenuItem(t("mcp.http_form.name", name=form.server_name), value="name"),
|
|
153
|
+
MenuItem(t("mcp.http_form.type"), value="type"),
|
|
154
|
+
MenuItem(t("mcp.http_form.url"), value="http_url"),
|
|
155
|
+
MenuItem(
|
|
156
|
+
t("mcp.http_form.auth_value", auth=t("mcp.http_form." + auth)),
|
|
157
|
+
value="http_auth",
|
|
158
|
+
),
|
|
159
|
+
MenuItem(t("mcp.http_form.headers"), value="http_headers"),
|
|
160
|
+
MenuItem(t("mcp.http_form.advanced"), value="json"),
|
|
161
|
+
MenuItem(t("mcp.http_form.save"), value="save"),
|
|
162
|
+
MenuItem(t("mcp.http_form.cancel"), value="cancel"),
|
|
163
|
+
]
|
|
164
|
+
# Do not echo credentials, header values, or URL query secrets.
|
|
165
|
+
builder = themed(
|
|
166
|
+
MenuBuilder(t("mcp.http_form.title")).items(items).alt_screen(False)
|
|
167
|
+
)
|
|
168
|
+
if form.validation_error:
|
|
169
|
+
builder.footer_hint(form.validation_error)
|
|
170
|
+
result = builder.build().run()
|
|
171
|
+
if result.cancelled or result.item is None:
|
|
172
|
+
return result
|
|
173
|
+
field = result.item.value
|
|
174
|
+
try:
|
|
175
|
+
if field == "http_url":
|
|
176
|
+
value = input_text(t("mcp.http_form.url"), config.get("url", ""))
|
|
177
|
+
if value is not None:
|
|
178
|
+
config["url"] = value.strip()
|
|
179
|
+
save_config(form, config)
|
|
180
|
+
elif field == "http_auth":
|
|
181
|
+
if choose_auth(config):
|
|
182
|
+
save_config(form, config)
|
|
183
|
+
elif field == "http_headers":
|
|
184
|
+
if edit_headers(config):
|
|
185
|
+
save_config(form, config)
|
|
186
|
+
elif field == "save":
|
|
187
|
+
validate_config(config)
|
|
188
|
+
return result
|
|
189
|
+
else:
|
|
190
|
+
return result
|
|
191
|
+
form.validation_error = None
|
|
192
|
+
except (ValueError, TypeError) as exc:
|
|
193
|
+
form.validation_error = str(exc)
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
def install_http_form():
|
|
197
|
+
from code_puppy.command_line.mcp import custom_server_form as core
|
|
198
|
+
|
|
199
|
+
original = core.run_form_flow
|
|
200
|
+
if getattr(original, "_http_fields", False):
|
|
201
|
+
return
|
|
202
|
+
|
|
203
|
+
def menu(form, **overrides):
|
|
204
|
+
if form._get_current_type() == "http":
|
|
205
|
+
return HTTPMenu(form, core.build_form_menu, overrides)
|
|
206
|
+
return core.build_form_menu(form, **overrides)
|
|
207
|
+
|
|
208
|
+
def type_menu(form):
|
|
209
|
+
old_type = form._get_current_type()
|
|
210
|
+
untouched = (
|
|
211
|
+
form.json_config.strip() == core.CUSTOM_SERVER_EXAMPLES[old_type].strip()
|
|
212
|
+
)
|
|
213
|
+
core.run_type_menu(form)
|
|
214
|
+
if old_type != "http" and form._get_current_type() == "http" and untouched:
|
|
215
|
+
save_config(form, {"type": "http", "url": "", "timeout": 30})
|
|
216
|
+
|
|
217
|
+
def run(form, **kwargs):
|
|
218
|
+
kwargs.setdefault("menu_factory", menu)
|
|
219
|
+
kwargs.setdefault("type_menu", type_menu)
|
|
220
|
+
return original(form, **kwargs)
|
|
221
|
+
|
|
222
|
+
run._http_fields = True
|
|
223
|
+
core.run_form_flow = run
|
code_puppy_core_plugins-0.0.54/code_puppy_core_plugins/mcp_binding_prompt/register_callbacks.py
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"""Bridge synchronous installers to the existing binding menu via startup."""
|
|
2
|
+
|
|
3
|
+
import logging
|
|
4
|
+
|
|
5
|
+
from code_puppy.callbacks import register_callback
|
|
6
|
+
|
|
7
|
+
logger = logging.getLogger(__name__)
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def prompt_bind_after_install_sync(server_name: str) -> None:
|
|
11
|
+
"""Run in the installer's foreground, never schedule a competing UI task."""
|
|
12
|
+
from code_puppy.agents import get_available_agents
|
|
13
|
+
from code_puppy.command_line.mcp_binding_menu import (
|
|
14
|
+
build_post_install_menu,
|
|
15
|
+
menu_session,
|
|
16
|
+
set_awaiting_user_input,
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
agents = sorted(get_available_agents(), key=str.lower)
|
|
20
|
+
if not agents:
|
|
21
|
+
return
|
|
22
|
+
set_awaiting_user_input(True)
|
|
23
|
+
try:
|
|
24
|
+
with menu_session():
|
|
25
|
+
build_post_install_menu(server_name, agents, alt_screen=False).run()
|
|
26
|
+
finally:
|
|
27
|
+
set_awaiting_user_input(False)
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def _install() -> None:
|
|
31
|
+
try:
|
|
32
|
+
from code_puppy.command_line import mcp_binding_menu
|
|
33
|
+
|
|
34
|
+
if not hasattr(mcp_binding_menu, "prompt_bind_after_install_sync"):
|
|
35
|
+
mcp_binding_menu.prompt_bind_after_install_sync = (
|
|
36
|
+
prompt_bind_after_install_sync
|
|
37
|
+
)
|
|
38
|
+
from .custom_install import install_routes
|
|
39
|
+
|
|
40
|
+
install_routes()
|
|
41
|
+
from .http_form import install_http_form
|
|
42
|
+
|
|
43
|
+
install_http_form()
|
|
44
|
+
except Exception:
|
|
45
|
+
logger.exception("Could not install MCP binding prompt compatibility bridge")
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
register_callback("startup", _install)
|
|
@@ -82,8 +82,6 @@ class PluginsMenu:
|
|
|
82
82
|
self.plugins: List[_PluginEntry] = []
|
|
83
83
|
self.disabled: set[str] = set()
|
|
84
84
|
self.project_dir: Optional[str] = None
|
|
85
|
-
self.lock_builtin: bool = False
|
|
86
|
-
self.hidden_builtin_count: int = 0
|
|
87
85
|
|
|
88
86
|
# The trust modal disables list bindings while open, keeping accept-word
|
|
89
87
|
# typing from triggering shortcuts; focus remains on its input.
|
|
@@ -131,27 +129,19 @@ class PluginsMenu:
|
|
|
131
129
|
get_project_plugins_directory,
|
|
132
130
|
)
|
|
133
131
|
from code_puppy.plugins.config import get_disabled_plugins
|
|
134
|
-
from code_puppy.plugins.config import (
|
|
135
|
-
get_lock_builtin_plugins,
|
|
136
|
-
)
|
|
137
132
|
|
|
138
133
|
loaded = get_loaded_plugins()
|
|
139
134
|
self.disabled = get_disabled_plugins()
|
|
140
|
-
self.lock_builtin = get_lock_builtin_plugins()
|
|
141
135
|
|
|
142
136
|
project_dir = get_project_plugins_directory()
|
|
143
137
|
self.project_dir = project_dir.as_posix() if project_dir else None
|
|
144
138
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
for
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
if self.lock_builtin and tier == "builtin":
|
|
152
|
-
self.hidden_builtin_count += 1
|
|
153
|
-
continue
|
|
154
|
-
entries.append(_PluginEntry(name, tier))
|
|
139
|
+
# Every tier is listed and toggleable -- builtins included.
|
|
140
|
+
entries: List[_PluginEntry] = [
|
|
141
|
+
_PluginEntry(name, tier)
|
|
142
|
+
for tier in ("builtin", "user", "project")
|
|
143
|
+
for name in sorted(loaded.get(tier, []))
|
|
144
|
+
]
|
|
155
145
|
|
|
156
146
|
# Project plugins held back by the trust gate — shown so Enter can
|
|
157
147
|
# open the ceremony popup on them.
|
|
@@ -72,21 +72,8 @@ def render_list(menu: "PluginsMenu") -> Fragments:
|
|
|
72
72
|
lines.append(("bold", " Plugins"))
|
|
73
73
|
lines.append(("", "\n\n"))
|
|
74
74
|
|
|
75
|
-
if menu.lock_builtin and menu.hidden_builtin_count:
|
|
76
|
-
lines.append(
|
|
77
|
-
(
|
|
78
|
-
"class:tui.muted",
|
|
79
|
-
f" {menu.hidden_builtin_count} builtin plugins are "
|
|
80
|
-
f"managed and hidden.",
|
|
81
|
-
)
|
|
82
|
-
)
|
|
83
|
-
lines.append(("", "\n\n"))
|
|
84
|
-
|
|
85
75
|
if not menu.plugins:
|
|
86
|
-
|
|
87
|
-
lines.append(("class:tui.warning", " No user or project plugins loaded."))
|
|
88
|
-
else:
|
|
89
|
-
lines.append(("class:tui.warning", " No plugins loaded."))
|
|
76
|
+
lines.append(("class:tui.warning", " No plugins loaded."))
|
|
90
77
|
lines.append(("", "\n"))
|
|
91
78
|
_render_hints(lines)
|
|
92
79
|
return lines
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "code-puppy-core-plugins"
|
|
7
|
-
version = "0.0.
|
|
7
|
+
version = "0.0.54"
|
|
8
8
|
description = "Official plugin bundle for Code Puppy"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.11,<3.15"
|
|
@@ -61,6 +61,7 @@ hook_creator = "code_puppy_core_plugins.hook_creator.register_callbacks"
|
|
|
61
61
|
hook_manager = "code_puppy_core_plugins.hook_manager.register_callbacks"
|
|
62
62
|
logfire_oauth = "code_puppy_core_plugins.logfire_oauth.register_callbacks"
|
|
63
63
|
logfire_sessions = "code_puppy_core_plugins.logfire_sessions.register_callbacks"
|
|
64
|
+
mcp_binding_prompt = "code_puppy_core_plugins.mcp_binding_prompt.register_callbacks"
|
|
64
65
|
meta_oauth = "code_puppy_core_plugins.meta_oauth.register_callbacks"
|
|
65
66
|
namespace_skill_search = "code_puppy_core_plugins.namespace_skill_search.register_callbacks"
|
|
66
67
|
no_tools = "code_puppy_core_plugins.no_tools.register_callbacks"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|