code-puppy-core-plugins 0.0.42__tar.gz → 0.0.43__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.42 → code_puppy_core_plugins-0.0.43}/PKG-INFO +1 -1
- code_puppy_core_plugins-0.0.43/code_puppy_core_plugins/profiles/README.md +47 -0
- code_puppy_core_plugins-0.0.43/code_puppy_core_plugins/profiles/__init__.py +1 -0
- code_puppy_core_plugins-0.0.43/code_puppy_core_plugins/profiles/config.py +111 -0
- code_puppy_core_plugins-0.0.43/code_puppy_core_plugins/profiles/locales/en-US.json +18 -0
- code_puppy_core_plugins-0.0.43/code_puppy_core_plugins/profiles/menu.py +95 -0
- code_puppy_core_plugins-0.0.43/code_puppy_core_plugins/profiles/register_callbacks.py +88 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/pyproject.toml +2 -1
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/.gitignore +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/LICENSE +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/README.md +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/acp/README.md +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/acp/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/acp/agent.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/acp/bridge.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/acp/capabilities.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/acp/commands.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/acp/content.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/acp/io_delegation.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/acp/mcp_config.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/acp/permissions.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/acp/persistence.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/acp/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/acp/replay.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/acp/session.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/acp/session_config.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/acp/state.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/agent_creator_skill/SKILL.md +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/agent_creator_skill/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/agent_creator_skill/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/agent_skills/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/agent_skills/config.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/agent_skills/discovery.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/agent_skills/downloader.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/agent_skills/enabled_skills.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/agent_skills/installer.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/agent_skills/metadata.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/agent_skills/prompt_builder.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/agent_skills/provider.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/agent_skills/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/agent_skills/remote_catalog.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/agent_skills/skill_catalog.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/agent_skills/skill_commands.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/agent_skills/skills_install_menu.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/agent_skills/skills_menu.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/auto_continue/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/auto_continue/classifier.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/auto_continue/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/aws_bedrock/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/aws_bedrock/config.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/aws_bedrock/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/aws_bedrock/utils.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/azure_foundry/README.md +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/azure_foundry/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/azure_foundry/config.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/azure_foundry/discovery.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/azure_foundry/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/azure_foundry/token.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/azure_foundry/utils.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/btw/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/btw/inline_view.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/btw/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/btw/side_query.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/chatgpt_oauth/IMAGEGEN_SKILL.md +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/chatgpt_oauth/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/chatgpt_oauth/config.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/chatgpt_oauth/image_generation.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/chatgpt_oauth/image_tool.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/chatgpt_oauth/model_catalog.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/chatgpt_oauth/oauth_flow.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/chatgpt_oauth/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/chatgpt_oauth/test_plugin.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/chatgpt_oauth/usage.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/chatgpt_oauth/utils.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/claude_code_hooks/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/claude_code_hooks/config.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/claude_code_hooks/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/claude_code_hooks/trust.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/claude_code_oauth/README.md +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/claude_code_oauth/SETUP.md +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/claude_code_oauth/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/claude_code_oauth/config.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/claude_code_oauth/fast_mode.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/claude_code_oauth/prompt_handler.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/claude_code_oauth/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/claude_code_oauth/test_plugin.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/claude_code_oauth/token_refresh_heartbeat.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/claude_code_oauth/utils.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/code_puppy_agent/AGENTS_AND_TOOLS.md +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/code_puppy_agent/MODELS_AND_MCP.md +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/code_puppy_agent/PLUGINS_AND_CALLBACKS.md +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/code_puppy_agent/SESSIONS_AND_HISTORY.md +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/code_puppy_agent/SKILL.md +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/code_puppy_agent/SKILLS_SYSTEM.md +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/code_puppy_agent/SYSTEM_PROMPT_CONFIG_AND_I18N.md +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/code_puppy_agent/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/code_puppy_agent/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/completion_notification/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/completion_notification/config.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/completion_notification/locales/en-US.json +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/completion_notification/locales/es.json +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/completion_notification/locales/fr-CA.json +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/completion_notification/notifier.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/completion_notification/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/computer_use/NativeCapture.swift +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/computer_use/README.md +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/computer_use/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/computer_use/accessibility.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/computer_use/activation.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/computer_use/backend.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/computer_use/backend_types.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/computer_use/capture.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/computer_use/commands.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/computer_use/geometry.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/computer_use/inline_image.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/computer_use/keycodes.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/computer_use/policy.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/computer_use/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/computer_use/safety.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/computer_use/settle.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/computer_use/state.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/computer_use/tools.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/context_indicator/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/context_indicator/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/context_indicator/usage.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/copilot_auth/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/copilot_auth/config.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/copilot_auth/reasoning_client.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/copilot_auth/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/copilot_auth/utils.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/customizable_commands/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/customizable_commands/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/dbos_durable_exec/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/dbos_durable_exec/cancel.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/dbos_durable_exec/commands.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/dbos_durable_exec/config.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/dbos_durable_exec/lifecycle.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/dbos_durable_exec/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/dbos_durable_exec/runtime.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/dbos_durable_exec/startup_lock.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/dbos_durable_exec/workflow_ids.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/dbos_durable_exec/wrapper.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/destructive_command_guard/AGENTS.md +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/destructive_command_guard/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/destructive_command_guard/detector.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/destructive_command_guard/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/emoji_filter/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/emoji_filter/config.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/emoji_filter/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/emoji_filter/stripper.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/empty_html_comment_filter/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/example_custom_command/README.md +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/example_custom_command/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/file_permission_handler/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/file_permission_handler/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/flux_bootstrap/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/_docs/README.md +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/_docs/cheatsheet.md +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/_docs/pipeline.md +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/_docs/synopsis.md +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/about.md +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/address-feedback.md +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/ask.md +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/aug.md +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/auto-pilot.md +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/cheatsheet.md +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/commit.md +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/config.md +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/create-pr.md +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/exec.md +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/new.md +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/qa.md +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/rebase.md +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/review.md +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/split.md +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/squash-commits.md +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/status.md +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/tests.md +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/flux_bootstrap/bundled/scripts/flux_about.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/flux_bootstrap/bundled/scripts/flux_cheatsheet.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/flux_bootstrap/bundled/scripts/flux_status.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/flux_bootstrap/installer.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/flux_bootstrap/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/force_push_guard/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/force_push_guard/detector.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/force_push_guard/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/fork/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/fork/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/frontend_emitter/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/frontend_emitter/emitter.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/frontend_emitter/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/frontend_emitter/session_context.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/grok_oauth/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/grok_oauth/config.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/grok_oauth/oauth_flow.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/grok_oauth/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/grok_oauth/utils.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/herdr/README.md +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/herdr/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/herdr/client.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/herdr/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/herdr/reporter.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/herdr/smoke.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/herdr/sources.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/hook_creator/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/hook_creator/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/hook_manager/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/hook_manager/config.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/hook_manager/hooks_menu.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/hook_manager/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/hook_manager/trust_handler.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/logfire_oauth/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/logfire_oauth/oauth.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/logfire_oauth/query_tool.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/logfire_oauth/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/logfire_sessions/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/logfire_sessions/mirror.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/logfire_sessions/query.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/logfire_sessions/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/logfire_sessions/sync.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/meta_oauth/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/meta_oauth/config.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/meta_oauth/oauth_flow.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/meta_oauth/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/meta_oauth/utils.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/namespace_skill_search/README.md +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/namespace_skill_search/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/namespace_skill_search/namespaces.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/namespace_skill_search/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/namespace_skill_search/search_tool.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/no_tools/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/no_tools/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/oauth_pasteback.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/oauth_puppy_html.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/obsidian_agent/README.md +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/obsidian_agent/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/obsidian_agent/agent_obsidian.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/obsidian_agent/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/ollama/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/ollama/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/ollama_setup/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/ollama_setup/completer.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/ollama_setup/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/openrouter_oauth/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/openrouter_oauth/config.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/openrouter_oauth/oauth_flow.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/openrouter_oauth/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/openrouter_oauth/test_plugin.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/plugin_list/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/plugin_list/plugin_contributions.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/plugin_list/plugin_meta.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/plugin_list/plugin_text_utils.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/plugin_list/plugins_menu.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/plugin_list/plugins_menu_render.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/plugin_list/project_trust_flow.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/plugin_list/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/pop_command/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/pop_command/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/prompt_newline/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/prompt_newline/config.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/prompt_newline/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/prune/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/prune/prune_menu.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/prune/prune_model.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/prune/prune_render.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/prune/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_kennel/README.md +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_kennel/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_kennel/commands.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_kennel/config.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_kennel/kennel.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_kennel/packer.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_kennel/recorder.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_kennel/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_kennel/retriever.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_kennel/schema.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_kennel/state.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_kennel/tools.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_kennel/wings.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_spinner/README.md +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_spinner/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_spinner/builtin_frames.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_spinner/commands.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_spinner/picker.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_spinner/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_spinner/spinners.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/qa_kitten_skill/SKILL.md +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/qa_kitten_skill/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/qa_kitten_skill/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/quick_resume/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/quick_resume/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/review_pr/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/review_pr/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/session_namer/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/session_namer/namer.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/session_namer/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/spill/LICENSE.deepseek +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/spill/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/spill/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/spill/store.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/stack_dump/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/stack_dump/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/statusline/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/statusline/config.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/statusline/payload.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/statusline/prompt_patch.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/statusline/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/statusline/runner.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/statusline/statusline_command.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/steer_queue/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/steer_queue/queue_menu.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/steer_queue/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/subagent_panel/README.md +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/subagent_panel/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/subagent_panel/coalesce_patch.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/subagent_panel/panel_render.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/subagent_panel/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/subagent_panel/resume_repaint.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/subagent_panel/state.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/switch_agent_resume/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/switch_agent_resume/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/termflow_tui.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/theme/README.md +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/theme/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/theme/bundled_palettes.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/theme/content_styles.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/theme/osc_palette.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/theme/picker.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/theme/prompt_toolkit_theme.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/theme/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/theme/rich_themes.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/theme/themes.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/timestamp_heartbeat/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/timestamp_heartbeat/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/token_ratio_learner/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/token_ratio_learner/ratios.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/token_ratio_learner/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/universal_constructor/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/universal_constructor/models.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/universal_constructor/provider.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/universal_constructor/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/universal_constructor/registry.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/universal_constructor/sandbox.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/web_retriever_skill/SKILL.md +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/web_retriever_skill/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/web_retriever_skill/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/wiggum/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/wiggum/goal_runs.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/wiggum/judge.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/wiggum/judge_config.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/wiggum/judges_menu.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/wiggum/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/wiggum/state.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/yolo_cli/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.42 → code_puppy_core_plugins-0.0.43}/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.43
|
|
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,47 @@
|
|
|
1
|
+
# Configuration profiles
|
|
2
|
+
|
|
3
|
+
Use different model/agent harness settings without having terminals overwrite
|
|
4
|
+
each other's pins:
|
|
5
|
+
|
|
6
|
+
```text
|
|
7
|
+
/profile # keyboard menu: c creates, Enter activates
|
|
8
|
+
/profile create web # snapshot this process's current config
|
|
9
|
+
/profile use web # switch only this running process
|
|
10
|
+
/profile list
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
```sh
|
|
14
|
+
code-puppy --profile web
|
|
15
|
+
code-puppy --profile default
|
|
16
|
+
code-puppy # always the default profile
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Named profiles store INI settings in
|
|
20
|
+
`~/.code_puppy/profiles/<name>/puppy.cfg` (or under
|
|
21
|
+
`$XDG_CONFIG_HOME/code_puppy/profiles` when configured). `default` keeps using
|
|
22
|
+
the existing `puppy.cfg`; no global active-profile pointer is needed.
|
|
23
|
+
A nonexistent CLI profile exits with status 2, rather than silently
|
|
24
|
+
running the wrong harness. Names are lowercase letters/digits/underscores/
|
|
25
|
+
hyphens, 1–64 characters, starting with a letter or digit.
|
|
26
|
+
|
|
27
|
+
All `puppy.cfg` settings are snapshotted, including agent model pins, model
|
|
28
|
+
settings, token limits and `/set` values. Changes persist within that profile.
|
|
29
|
+
Two processes deliberately using the **same** profile still share its settings;
|
|
30
|
+
use distinct names for independent harnesses. Switching rebuilds the current
|
|
31
|
+
agent while retaining its conversation, rather than changing agent identity.
|
|
32
|
+
|
|
33
|
+
Model catalogs, credentials, custom agent definitions, skills, MCP server files
|
|
34
|
+
and conversation storage remain shared. Profiles do not restrict which agents
|
|
35
|
+
a model may invoke. A profile is a settings preset, not a security sandbox.
|
|
36
|
+
Provider API keys are stored once in the OS keyring, with the existing
|
|
37
|
+
permission-hardened `secrets.json` fallback. Creating or selecting a profile
|
|
38
|
+
migrates recognized legacy credentials from all profile configs, checking for
|
|
39
|
+
conflicts before writing and removing legacy values only after verified storage.
|
|
40
|
+
Conflicting values block the operation without choosing a winner. Reconcile the
|
|
41
|
+
reported key in the legacy configs and shared store, then retry. Values are never
|
|
42
|
+
included in the conflict message. Environment-only keys are not copied.
|
|
43
|
+
Custom model API-key and secret-header environment references are recognized;
|
|
44
|
+
unrelated arbitrary secrets cannot be inferred, so configs still need care.
|
|
45
|
+
Data is INI, not executed Python. The plugin's `config.py` contains storage logic.
|
|
46
|
+
|
|
47
|
+
No deletion or overwrite operation is exposed in this initial version.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""Process-local configuration profiles."""
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"""Profile persistence; ordinary INI data, never executable Python presets.
|
|
2
|
+
|
|
3
|
+
The legacy config is the default profile. Selecting a profile only redirects
|
|
4
|
+
this process's config I/O; there is deliberately no global 'active' pointer.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
import io
|
|
10
|
+
import re
|
|
11
|
+
from pathlib import Path
|
|
12
|
+
|
|
13
|
+
from code_puppy import config
|
|
14
|
+
from code_puppy.atomic_io import atomic_write_bytes, path_lock
|
|
15
|
+
from code_puppy.config_file import load_config
|
|
16
|
+
from code_puppy.i18n import t
|
|
17
|
+
|
|
18
|
+
_active = "default"
|
|
19
|
+
_NAME = re.compile(r"[a-z0-9][a-z0-9_-]{0,63}\Z")
|
|
20
|
+
_RESERVED = {"con", "prn", "aux", "nul"} | {
|
|
21
|
+
f"{prefix}{i}" for prefix in ("com", "lpt") for i in range(1, 10)
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def validate_name(name: str) -> str:
|
|
26
|
+
if not _NAME.fullmatch(name) or name in _RESERVED:
|
|
27
|
+
raise ValueError(t("profiles.invalid_name"))
|
|
28
|
+
return name
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def profile_path(name: str) -> Path:
|
|
32
|
+
validate_name(name)
|
|
33
|
+
root = Path(config.CONFIG_DIR)
|
|
34
|
+
if name == "default":
|
|
35
|
+
return root / "puppy.cfg"
|
|
36
|
+
directory = root / "profiles" / name
|
|
37
|
+
# Do not follow profile aliases outside the profiles directory.
|
|
38
|
+
if (
|
|
39
|
+
(root / "profiles").is_symlink()
|
|
40
|
+
or directory.is_symlink()
|
|
41
|
+
or (directory / "puppy.cfg").is_symlink()
|
|
42
|
+
):
|
|
43
|
+
raise ValueError(t("profiles.symlink"))
|
|
44
|
+
return directory / "puppy.cfg"
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def active_profile() -> str:
|
|
48
|
+
return _active
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def list_profiles() -> list[str]:
|
|
52
|
+
root = Path(config.CONFIG_DIR) / "profiles"
|
|
53
|
+
if not root.exists():
|
|
54
|
+
return ["default"]
|
|
55
|
+
return ["default"] + sorted(
|
|
56
|
+
p.name
|
|
57
|
+
for p in root.iterdir()
|
|
58
|
+
if p.name != "default"
|
|
59
|
+
and _NAME.fullmatch(p.name)
|
|
60
|
+
and not p.is_symlink()
|
|
61
|
+
and not (p / "puppy.cfg").is_symlink()
|
|
62
|
+
and (p / "puppy.cfg").is_file()
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
def create_profile(name: str) -> None:
|
|
67
|
+
"""Snapshot current settings without overwriting an existing profile."""
|
|
68
|
+
target = profile_path(name)
|
|
69
|
+
if name == "default":
|
|
70
|
+
raise ValueError(t("profiles.exists", name=name))
|
|
71
|
+
if target.exists():
|
|
72
|
+
raise ValueError(t("profiles.exists", name=name))
|
|
73
|
+
migrate_credentials()
|
|
74
|
+
snapshot = load_config(str(config.CONFIG_FILE))
|
|
75
|
+
from code_puppy.shared_credentials import is_credential_key
|
|
76
|
+
|
|
77
|
+
# A concurrently running older Puppy may have written a plaintext key
|
|
78
|
+
# after migration. Never duplicate it into the new profile.
|
|
79
|
+
for section in [snapshot.default_section, *snapshot.sections()]:
|
|
80
|
+
for key in list(snapshot[section]):
|
|
81
|
+
if is_credential_key(key):
|
|
82
|
+
snapshot[section].pop(key, None)
|
|
83
|
+
buffer = io.StringIO()
|
|
84
|
+
snapshot.write(buffer)
|
|
85
|
+
target.parent.parent.mkdir(mode=0o700, parents=True, exist_ok=True)
|
|
86
|
+
target.parent.mkdir(mode=0o700, exist_ok=True)
|
|
87
|
+
with path_lock(str(target)):
|
|
88
|
+
if target.exists():
|
|
89
|
+
raise ValueError(t("profiles.exists", name=name))
|
|
90
|
+
atomic_write_bytes(str(target), buffer.getvalue().encode("utf-8"))
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
def activate_profile(name: str) -> None:
|
|
94
|
+
"""Select a config for this process; missing named profiles fail closed."""
|
|
95
|
+
global _active
|
|
96
|
+
target = profile_path(name)
|
|
97
|
+
if name != "default" and not target.is_file():
|
|
98
|
+
raise ValueError(t("profiles.missing", name=name))
|
|
99
|
+
# Validate accessibility before changing any runtime state.
|
|
100
|
+
load_config(str(target))
|
|
101
|
+
migrate_credentials()
|
|
102
|
+
config.CONFIG_FILE = str(target)
|
|
103
|
+
config.reset_session_model()
|
|
104
|
+
config.clear_model_cache()
|
|
105
|
+
_active = name
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
def migrate_credentials() -> None:
|
|
109
|
+
from code_puppy.shared_credentials import migrate
|
|
110
|
+
|
|
111
|
+
migrate([str(profile_path(name)) for name in list_profiles()])
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"profiles.title": "Configuration profiles (* active in this process)",
|
|
3
|
+
"profiles.cli_help": "Use a named configuration profile for this run (default: default)",
|
|
4
|
+
"profiles.help": "Create and switch isolated configuration profiles",
|
|
5
|
+
"profiles.invalid_name": "Use 1–64 lowercase letters, digits, underscores or hyphens; start with a letter or digit.",
|
|
6
|
+
"profiles.symlink": "Symlinked profiles are not supported.",
|
|
7
|
+
"profiles.exists": "Profile '{name}' already exists.",
|
|
8
|
+
"profiles.missing": "Profile '{name}' does not exist. Create it with /profile create {name}.",
|
|
9
|
+
"profiles.error": "Profile error: {detail}",
|
|
10
|
+
"profiles.created": "Created '{name}' from the current settings. Select it with Enter or /profile use {name}.",
|
|
11
|
+
"profiles.active": "Active profile: {name} (this process only).",
|
|
12
|
+
"profiles.list": "Active: {active}\nProfiles: {names}",
|
|
13
|
+
"profiles.usage": "/profile | /profile list | /profile create NAME | /profile use NAME",
|
|
14
|
+
"profiles.keys": "↑/↓ select · Enter activate · c create · Esc/q close",
|
|
15
|
+
"profiles.new_name": "New profile name: {name}",
|
|
16
|
+
"profiles.row": "{cursor} {active} {name}",
|
|
17
|
+
"profiles.no_tty": "The profile menu needs a terminal. Use /profile list, create NAME or use NAME instead."
|
|
18
|
+
}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"""Small keyboard-driven profile picker with inline profile creation."""
|
|
2
|
+
|
|
3
|
+
from code_puppy.i18n import t
|
|
4
|
+
from code_puppy_core_plugins.termflow_tui import FragmentTUI, fragments_to_lines
|
|
5
|
+
|
|
6
|
+
from . import config
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class ProfileMenu:
|
|
10
|
+
def __init__(self):
|
|
11
|
+
self.names = config.list_profiles()
|
|
12
|
+
self.index = (
|
|
13
|
+
self.names.index(config.active_profile())
|
|
14
|
+
if config.active_profile() in self.names
|
|
15
|
+
else 0
|
|
16
|
+
)
|
|
17
|
+
self.creating = False
|
|
18
|
+
self.name = ""
|
|
19
|
+
self.message = ""
|
|
20
|
+
|
|
21
|
+
def render(self):
|
|
22
|
+
fragments = [("class:tui.title", t("profiles.title") + "\n\n")]
|
|
23
|
+
# Keep the selection visible even with a large profile collection.
|
|
24
|
+
start = max(0, self.index - 5)
|
|
25
|
+
for index in range(start, min(len(self.names), start + 10)):
|
|
26
|
+
name = self.names[index]
|
|
27
|
+
label = t(
|
|
28
|
+
"profiles.row",
|
|
29
|
+
cursor=">" if index == self.index else " ",
|
|
30
|
+
name=name,
|
|
31
|
+
active="*" if name == config.active_profile() else " ",
|
|
32
|
+
)
|
|
33
|
+
fragments.append(
|
|
34
|
+
(
|
|
35
|
+
"class:tui.selected" if index == self.index else "class:tui.text",
|
|
36
|
+
label + "\n",
|
|
37
|
+
)
|
|
38
|
+
)
|
|
39
|
+
fragments.append(("class:tui.help", "\n" + t("profiles.keys") + "\n"))
|
|
40
|
+
if self.creating:
|
|
41
|
+
fragments.append(
|
|
42
|
+
("class:tui.input", t("profiles.new_name", name=self.name) + "\n")
|
|
43
|
+
)
|
|
44
|
+
if self.message:
|
|
45
|
+
fragments.append(("class:tui.warning", self.message))
|
|
46
|
+
return fragments_to_lines(fragments)
|
|
47
|
+
|
|
48
|
+
def on_key(self, key):
|
|
49
|
+
if key in ("ctrl-c", "\x03", "\x1b", "escape"):
|
|
50
|
+
if self.creating:
|
|
51
|
+
self.creating = False
|
|
52
|
+
return False
|
|
53
|
+
return True
|
|
54
|
+
try:
|
|
55
|
+
if self.creating:
|
|
56
|
+
if key in ("\r", "\n", "enter"):
|
|
57
|
+
config.create_profile(self.name)
|
|
58
|
+
self.names = config.list_profiles()
|
|
59
|
+
self.index = self.names.index(self.name)
|
|
60
|
+
self.creating = False
|
|
61
|
+
self.message = t("profiles.created", name=self.name)
|
|
62
|
+
elif key in ("\x7f", "\b", "backspace"):
|
|
63
|
+
self.name = self.name[:-1]
|
|
64
|
+
elif (
|
|
65
|
+
len(key) == 1
|
|
66
|
+
and key.isascii()
|
|
67
|
+
and key.isprintable()
|
|
68
|
+
and len(self.name) < 64
|
|
69
|
+
):
|
|
70
|
+
self.name += key
|
|
71
|
+
elif key in ("up", "\x1b[A", "k"):
|
|
72
|
+
self.index = (self.index - 1) % len(self.names)
|
|
73
|
+
elif key in ("down", "\x1b[B", "j"):
|
|
74
|
+
self.index = (self.index + 1) % len(self.names)
|
|
75
|
+
elif key == "c":
|
|
76
|
+
self.creating, self.name, self.message = True, "", ""
|
|
77
|
+
elif key in ("\r", "\n", "enter"):
|
|
78
|
+
from .register_callbacks import switch_profile
|
|
79
|
+
|
|
80
|
+
switch_profile(self.names[self.index])
|
|
81
|
+
self.message = t("profiles.active", name=config.active_profile())
|
|
82
|
+
elif key == "q":
|
|
83
|
+
return True
|
|
84
|
+
except (OSError, ValueError, RuntimeError) as exc:
|
|
85
|
+
self.message = t("profiles.error", detail=str(exc))
|
|
86
|
+
return False
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
def run_menu():
|
|
90
|
+
import sys
|
|
91
|
+
|
|
92
|
+
if not sys.stdin.isatty():
|
|
93
|
+
raise ValueError(t("profiles.no_tty"))
|
|
94
|
+
menu = ProfileMenu()
|
|
95
|
+
FragmentTUI(menu.render, menu.on_key).run()
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"""CLI and slash-command entry points for configuration profiles."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import shlex
|
|
6
|
+
import sys
|
|
7
|
+
from pathlib import Path
|
|
8
|
+
|
|
9
|
+
from code_puppy.callbacks import register_callback
|
|
10
|
+
from code_puppy.i18n import add_catalog_dir, t
|
|
11
|
+
|
|
12
|
+
from . import config
|
|
13
|
+
|
|
14
|
+
add_catalog_dir(Path(__file__).parent / "locales")
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def register_cli_args(parser):
|
|
18
|
+
parser.add_argument(
|
|
19
|
+
"--profile", metavar="NAME", default="default", help=t("profiles.cli_help")
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def handle_cli_args(args):
|
|
24
|
+
try:
|
|
25
|
+
config.activate_profile(getattr(args, "profile", "default"))
|
|
26
|
+
except (OSError, ValueError) as exc:
|
|
27
|
+
print(t("profiles.error", detail=str(exc)), file=sys.stderr)
|
|
28
|
+
return {"handled": True, "exit_code": 2}
|
|
29
|
+
return None
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def switch_profile(name):
|
|
33
|
+
"""Rebuild the current agent so cached model settings cannot leak."""
|
|
34
|
+
from code_puppy.agents.agent_manager import (
|
|
35
|
+
get_current_agent_name,
|
|
36
|
+
set_current_agent,
|
|
37
|
+
)
|
|
38
|
+
|
|
39
|
+
previous = config.active_profile()
|
|
40
|
+
agent = get_current_agent_name()
|
|
41
|
+
config.activate_profile(name)
|
|
42
|
+
try:
|
|
43
|
+
set_current_agent(agent)
|
|
44
|
+
except Exception:
|
|
45
|
+
config.activate_profile(previous)
|
|
46
|
+
raise
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def custom_command(command, name):
|
|
50
|
+
if name != "profile":
|
|
51
|
+
return None
|
|
52
|
+
from code_puppy.messaging import emit_error, emit_info
|
|
53
|
+
|
|
54
|
+
try:
|
|
55
|
+
parts = shlex.split(command)[1:]
|
|
56
|
+
if not parts:
|
|
57
|
+
from .menu import run_menu
|
|
58
|
+
|
|
59
|
+
run_menu()
|
|
60
|
+
elif parts == ["list"]:
|
|
61
|
+
emit_info(
|
|
62
|
+
t(
|
|
63
|
+
"profiles.list",
|
|
64
|
+
active=config.active_profile(),
|
|
65
|
+
names=", ".join(config.list_profiles()),
|
|
66
|
+
)
|
|
67
|
+
)
|
|
68
|
+
elif len(parts) == 2 and parts[0] == "create":
|
|
69
|
+
config.create_profile(parts[1])
|
|
70
|
+
emit_info(t("profiles.created", name=parts[1]))
|
|
71
|
+
elif len(parts) == 2 and parts[0] == "use":
|
|
72
|
+
switch_profile(parts[1])
|
|
73
|
+
emit_info(t("profiles.active", name=parts[1]))
|
|
74
|
+
else:
|
|
75
|
+
emit_info(t("profiles.usage"))
|
|
76
|
+
except (OSError, ValueError, RuntimeError) as exc:
|
|
77
|
+
emit_error(t("profiles.error", detail=str(exc)))
|
|
78
|
+
return True
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
def custom_help():
|
|
82
|
+
return [("profile", t("profiles.help"))]
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
register_callback("register_cli_args", register_cli_args)
|
|
86
|
+
register_callback("handle_cli_args", handle_cli_args)
|
|
87
|
+
register_callback("custom_command", custom_command)
|
|
88
|
+
register_callback("custom_command_help", custom_help)
|
|
@@ -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.43"
|
|
8
8
|
description = "Official plugin bundle for Code Puppy"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.11,<3.15"
|
|
@@ -69,6 +69,7 @@ ollama_setup = "code_puppy_core_plugins.ollama_setup.register_callbacks"
|
|
|
69
69
|
openrouter_oauth = "code_puppy_core_plugins.openrouter_oauth.register_callbacks"
|
|
70
70
|
plugin_list = "code_puppy_core_plugins.plugin_list.register_callbacks"
|
|
71
71
|
pop_command = "code_puppy_core_plugins.pop_command.register_callbacks"
|
|
72
|
+
profiles = "code_puppy_core_plugins.profiles.register_callbacks"
|
|
72
73
|
prompt_newline = "code_puppy_core_plugins.prompt_newline.register_callbacks"
|
|
73
74
|
prune = "code_puppy_core_plugins.prune.register_callbacks"
|
|
74
75
|
puppy_kennel = "code_puppy_core_plugins.puppy_kennel.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
|
|
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
|