code-puppy-core-plugins 0.0.41__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.41 → code_puppy_core_plugins-0.0.43}/PKG-INFO +1 -1
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/chatgpt_oauth/config.py +7 -2
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/chatgpt_oauth/register_callbacks.py +2 -2
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/chatgpt_oauth/test_plugin.py +51 -1
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/chatgpt_oauth/utils.py +32 -8
- 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.41 → code_puppy_core_plugins-0.0.43}/pyproject.toml +2 -1
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/.gitignore +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/LICENSE +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/README.md +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/acp/README.md +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/acp/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/acp/agent.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/acp/bridge.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/acp/capabilities.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/acp/commands.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/acp/content.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/acp/io_delegation.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/acp/mcp_config.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/acp/permissions.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/acp/persistence.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/acp/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/acp/replay.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/acp/session.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/acp/session_config.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/acp/state.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/agent_creator_skill/SKILL.md +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/agent_creator_skill/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.41 → 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.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/agent_skills/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/agent_skills/config.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/agent_skills/discovery.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/agent_skills/downloader.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/agent_skills/enabled_skills.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/agent_skills/installer.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/agent_skills/metadata.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/agent_skills/prompt_builder.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/agent_skills/provider.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/agent_skills/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/agent_skills/remote_catalog.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/agent_skills/skill_catalog.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/agent_skills/skill_commands.py +0 -0
- {code_puppy_core_plugins-0.0.41 → 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.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/agent_skills/skills_menu.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/auto_continue/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/auto_continue/classifier.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/auto_continue/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/aws_bedrock/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/aws_bedrock/config.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/aws_bedrock/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/aws_bedrock/utils.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/azure_foundry/README.md +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/azure_foundry/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/azure_foundry/config.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/azure_foundry/discovery.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/azure_foundry/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/azure_foundry/token.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/azure_foundry/utils.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/btw/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/btw/inline_view.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/btw/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/btw/side_query.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/chatgpt_oauth/IMAGEGEN_SKILL.md +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/chatgpt_oauth/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/chatgpt_oauth/image_generation.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/chatgpt_oauth/image_tool.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/chatgpt_oauth/model_catalog.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/chatgpt_oauth/oauth_flow.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/chatgpt_oauth/usage.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/claude_code_hooks/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/claude_code_hooks/config.py +0 -0
- {code_puppy_core_plugins-0.0.41 → 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.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/claude_code_hooks/trust.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/claude_code_oauth/README.md +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/claude_code_oauth/SETUP.md +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/claude_code_oauth/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/claude_code_oauth/config.py +0 -0
- {code_puppy_core_plugins-0.0.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/claude_code_oauth/utils.py +0 -0
- {code_puppy_core_plugins-0.0.41 → 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.41 → 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.41 → 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.41 → 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.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/code_puppy_agent/SKILL.md +0 -0
- {code_puppy_core_plugins-0.0.41 → 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.41 → 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.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/code_puppy_agent/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.41 → 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.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/completion_notification/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/completion_notification/config.py +0 -0
- {code_puppy_core_plugins-0.0.41 → 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.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/completion_notification/locales/es.json +0 -0
- {code_puppy_core_plugins-0.0.41 → 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.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/completion_notification/notifier.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/completion_notification/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/computer_use/NativeCapture.swift +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/computer_use/README.md +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/computer_use/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/computer_use/accessibility.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/computer_use/activation.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/computer_use/backend.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/computer_use/backend_types.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/computer_use/capture.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/computer_use/commands.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/computer_use/geometry.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/computer_use/inline_image.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/computer_use/keycodes.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/computer_use/policy.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/computer_use/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/computer_use/safety.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/computer_use/settle.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/computer_use/state.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/computer_use/tools.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/context_indicator/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/context_indicator/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/context_indicator/usage.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/copilot_auth/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/copilot_auth/config.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/copilot_auth/reasoning_client.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/copilot_auth/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/copilot_auth/utils.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/customizable_commands/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/customizable_commands/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/dbos_durable_exec/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/dbos_durable_exec/cancel.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/dbos_durable_exec/commands.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/dbos_durable_exec/config.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/dbos_durable_exec/lifecycle.py +0 -0
- {code_puppy_core_plugins-0.0.41 → 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.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/dbos_durable_exec/runtime.py +0 -0
- {code_puppy_core_plugins-0.0.41 → 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.41 → 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.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/dbos_durable_exec/wrapper.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/destructive_command_guard/AGENTS.md +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/destructive_command_guard/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/destructive_command_guard/detector.py +0 -0
- {code_puppy_core_plugins-0.0.41 → 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.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/emoji_filter/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/emoji_filter/config.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/emoji_filter/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/emoji_filter/stripper.py +0 -0
- {code_puppy_core_plugins-0.0.41 → 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.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/example_custom_command/README.md +0 -0
- {code_puppy_core_plugins-0.0.41 → 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.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/file_permission_handler/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.41 → 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.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/flux_bootstrap/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → 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.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/flux_bootstrap/installer.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/flux_bootstrap/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/force_push_guard/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/force_push_guard/detector.py +0 -0
- {code_puppy_core_plugins-0.0.41 → 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.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/fork/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/fork/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/frontend_emitter/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/frontend_emitter/emitter.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/frontend_emitter/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/frontend_emitter/session_context.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/grok_oauth/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/grok_oauth/config.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/grok_oauth/oauth_flow.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/grok_oauth/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/grok_oauth/utils.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/herdr/README.md +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/herdr/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/herdr/client.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/herdr/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/herdr/reporter.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/herdr/smoke.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/herdr/sources.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/hook_creator/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/hook_creator/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/hook_manager/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/hook_manager/config.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/hook_manager/hooks_menu.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/hook_manager/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/hook_manager/trust_handler.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/logfire_oauth/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/logfire_oauth/oauth.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/logfire_oauth/query_tool.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/logfire_oauth/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/logfire_sessions/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/logfire_sessions/mirror.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/logfire_sessions/query.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/logfire_sessions/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/logfire_sessions/sync.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/meta_oauth/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/meta_oauth/config.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/meta_oauth/oauth_flow.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/meta_oauth/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/meta_oauth/utils.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/namespace_skill_search/README.md +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/namespace_skill_search/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/namespace_skill_search/namespaces.py +0 -0
- {code_puppy_core_plugins-0.0.41 → 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.41 → 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.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/no_tools/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/no_tools/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/oauth_pasteback.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/oauth_puppy_html.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/obsidian_agent/README.md +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/obsidian_agent/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/obsidian_agent/agent_obsidian.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/obsidian_agent/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/ollama/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/ollama/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/ollama_setup/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/ollama_setup/completer.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/ollama_setup/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/openrouter_oauth/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/openrouter_oauth/config.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/openrouter_oauth/oauth_flow.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/openrouter_oauth/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/openrouter_oauth/test_plugin.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/plugin_list/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/plugin_list/plugin_contributions.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/plugin_list/plugin_meta.py +0 -0
- {code_puppy_core_plugins-0.0.41 → 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.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/plugin_list/plugins_menu.py +0 -0
- {code_puppy_core_plugins-0.0.41 → 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.41 → 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.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/plugin_list/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/pop_command/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/pop_command/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/prompt_newline/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/prompt_newline/config.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/prompt_newline/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/prune/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/prune/prune_menu.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/prune/prune_model.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/prune/prune_render.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/prune/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_kennel/README.md +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_kennel/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_kennel/commands.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_kennel/config.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_kennel/kennel.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_kennel/packer.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_kennel/recorder.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_kennel/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_kennel/retriever.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_kennel/schema.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_kennel/state.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_kennel/tools.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_kennel/wings.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_spinner/README.md +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_spinner/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_spinner/builtin_frames.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_spinner/commands.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_spinner/picker.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_spinner/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/puppy_spinner/spinners.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/qa_kitten_skill/SKILL.md +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/qa_kitten_skill/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.41 → 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.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/quick_resume/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/quick_resume/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/review_pr/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/review_pr/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/session_namer/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/session_namer/namer.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/session_namer/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/spill/LICENSE.deepseek +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/spill/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/spill/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/spill/store.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/stack_dump/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/stack_dump/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/statusline/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/statusline/config.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/statusline/payload.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/statusline/prompt_patch.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/statusline/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/statusline/runner.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/statusline/statusline_command.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/steer_queue/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/steer_queue/queue_menu.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/steer_queue/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/subagent_panel/README.md +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/subagent_panel/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/subagent_panel/coalesce_patch.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/subagent_panel/panel_render.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/subagent_panel/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/subagent_panel/resume_repaint.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/subagent_panel/state.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/switch_agent_resume/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.41 → 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.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/termflow_tui.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/theme/README.md +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/theme/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/theme/bundled_palettes.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/theme/content_styles.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/theme/osc_palette.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/theme/picker.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/theme/prompt_toolkit_theme.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/theme/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/theme/rich_themes.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/theme/themes.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/timestamp_heartbeat/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/timestamp_heartbeat/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/token_ratio_learner/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/token_ratio_learner/ratios.py +0 -0
- {code_puppy_core_plugins-0.0.41 → 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.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/universal_constructor/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/universal_constructor/models.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/universal_constructor/provider.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/universal_constructor/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/universal_constructor/registry.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/universal_constructor/sandbox.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/web_retriever_skill/SKILL.md +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/web_retriever_skill/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.41 → 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.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/wiggum/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/wiggum/goal_runs.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/wiggum/judge.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/wiggum/judge_config.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/wiggum/judges_menu.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/wiggum/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/wiggum/state.py +0 -0
- {code_puppy_core_plugins-0.0.41 → code_puppy_core_plugins-0.0.43}/code_puppy_core_plugins/yolo_cli/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.41 → 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
|
|
@@ -28,8 +28,13 @@ CHATGPT_OAUTH_CONFIG: Dict[str, Any] = {
|
|
|
28
28
|
# backend serves — never the raw number (openai/codex#31860, #32806).
|
|
29
29
|
"default_context_length": 258400,
|
|
30
30
|
"api_key_env_var": "CHATGPT_OAUTH_API_KEY",
|
|
31
|
-
# Codex CLI version info (for User-Agent header
|
|
32
|
-
|
|
31
|
+
# Codex CLI version info (for User-Agent header AND the /models
|
|
32
|
+
# ``client_version`` query param). The catalog gates models on it:
|
|
33
|
+
# gpt-6-astra has ``minimal_client_version: 0.153.0``, so an older value
|
|
34
|
+
# here silently hides newer models. Bump when a new generation lands.
|
|
35
|
+
"client_version": "0.153.3",
|
|
36
|
+
# Model selected right after a successful OAuth login.
|
|
37
|
+
"default_model": "codex-gpt-6-astra",
|
|
33
38
|
"originator": "codex_cli_rs",
|
|
34
39
|
}
|
|
35
40
|
|
|
@@ -129,7 +129,7 @@ def _handle_custom_command(command: str, name: str) -> Optional[bool]:
|
|
|
129
129
|
|
|
130
130
|
if name in {"chatgpt-auth", "codex-auth"}:
|
|
131
131
|
run_oauth_flow()
|
|
132
|
-
set_model_and_reload_agent("
|
|
132
|
+
set_model_and_reload_agent(CHATGPT_OAUTH_CONFIG["default_model"])
|
|
133
133
|
# Auth just succeeded: re-discover the auth-gated codex-imagegen skill now
|
|
134
134
|
# rather than waiting for the next process restart.
|
|
135
135
|
refresh_skill_cache()
|
|
@@ -205,7 +205,7 @@ def _create_chatgpt_oauth_model(
|
|
|
205
205
|
|
|
206
206
|
# Build headers for ChatGPT Codex API
|
|
207
207
|
originator = CHATGPT_OAUTH_CONFIG.get("originator", "codex_cli_rs")
|
|
208
|
-
client_version = CHATGPT_OAUTH_CONFIG.get("client_version", "0.
|
|
208
|
+
client_version = CHATGPT_OAUTH_CONFIG.get("client_version", "0.153.3")
|
|
209
209
|
|
|
210
210
|
headers = {
|
|
211
211
|
"ChatGPT-Account-Id": account_id,
|
|
@@ -314,10 +314,47 @@ def test_auth_command_refreshes_skill_cache():
|
|
|
314
314
|
)
|
|
315
315
|
|
|
316
316
|
oauth_flow.assert_called_once_with()
|
|
317
|
-
set_model.assert_called_once_with("codex-gpt-
|
|
317
|
+
set_model.assert_called_once_with("codex-gpt-6-astra")
|
|
318
318
|
refresh_skills.assert_called_once_with()
|
|
319
319
|
|
|
320
320
|
|
|
321
|
+
def test_default_model_is_in_fallback_catalog():
|
|
322
|
+
"""A default that isn't in the fallback list would 404 when /models is down."""
|
|
323
|
+
from code_puppy_core_plugins.chatgpt_oauth.config import CHATGPT_OAUTH_CONFIG
|
|
324
|
+
|
|
325
|
+
default = CHATGPT_OAUTH_CONFIG["default_model"]
|
|
326
|
+
prefix = CHATGPT_OAUTH_CONFIG["prefix"]
|
|
327
|
+
assert default.startswith(prefix)
|
|
328
|
+
assert default[len(prefix) :] in utils.DEFAULT_CODEX_MODELS
|
|
329
|
+
|
|
330
|
+
|
|
331
|
+
def test_client_version_meets_gpt6_minimum():
|
|
332
|
+
"""gpt-6-astra carries minimal_client_version 0.153.0 in the catalog."""
|
|
333
|
+
from code_puppy_core_plugins.chatgpt_oauth.config import CHATGPT_OAUTH_CONFIG
|
|
334
|
+
|
|
335
|
+
version = tuple(int(p) for p in CHATGPT_OAUTH_CONFIG["client_version"].split("."))
|
|
336
|
+
assert version >= (0, 153, 0)
|
|
337
|
+
|
|
338
|
+
|
|
339
|
+
@pytest.mark.parametrize(
|
|
340
|
+
"name,xhigh,max_effort,responses_controls",
|
|
341
|
+
[
|
|
342
|
+
("gpt-6-astra", True, True, True),
|
|
343
|
+
("gpt-6-astra-pro", True, True, True),
|
|
344
|
+
("gpt-5.6-sol", True, True, True),
|
|
345
|
+
("gpt-5.5", True, False, False),
|
|
346
|
+
("gpt-5.4-mini", True, False, False),
|
|
347
|
+
("gpt-5.3-codex-spark", True, False, False),
|
|
348
|
+
("codex-auto-review", True, False, False),
|
|
349
|
+
("gpt-4o", False, False, False),
|
|
350
|
+
],
|
|
351
|
+
)
|
|
352
|
+
def test_reasoning_gates_by_gpt_generation(name, xhigh, max_effort, responses_controls):
|
|
353
|
+
assert utils._supports_xhigh_reasoning(name) is xhigh
|
|
354
|
+
assert utils._supports_max_reasoning(name) is max_effort
|
|
355
|
+
assert utils._supports_responses_reasoning_controls(name) is responses_controls
|
|
356
|
+
|
|
357
|
+
|
|
321
358
|
def test_codex_imagegen_agent_tool(tmp_path):
|
|
322
359
|
registered = {}
|
|
323
360
|
|
|
@@ -679,5 +716,18 @@ def test_add_models_to_chatgpt_config(tmp_path):
|
|
|
679
716
|
assert loaded["codex-gpt-4o"]["context_length"] == 258400
|
|
680
717
|
|
|
681
718
|
|
|
719
|
+
def test_gpt6_astra_entry_gets_full_reasoning_surface(tmp_path):
|
|
720
|
+
with patch.object(
|
|
721
|
+
utils, "get_chatgpt_models_path", return_value=tmp_path / "chatgpt_models.json"
|
|
722
|
+
):
|
|
723
|
+
assert utils.add_models_to_extra_config(["gpt-6-astra"])
|
|
724
|
+
entry = utils.load_chatgpt_models()["codex-gpt-6-astra"]
|
|
725
|
+
|
|
726
|
+
assert entry["supports_xhigh_reasoning"] is True
|
|
727
|
+
assert entry["supports_max_reasoning"] is True
|
|
728
|
+
assert "reasoning_context" in entry["supported_settings"]
|
|
729
|
+
assert "reasoning_mode" in entry["supported_settings"]
|
|
730
|
+
|
|
731
|
+
|
|
682
732
|
if __name__ == "__main__":
|
|
683
733
|
pytest.main([__file__, "-v"])
|
|
@@ -7,10 +7,11 @@ import datetime
|
|
|
7
7
|
import hashlib
|
|
8
8
|
import json
|
|
9
9
|
import logging
|
|
10
|
+
import re
|
|
10
11
|
import secrets
|
|
11
12
|
import time
|
|
12
13
|
from dataclasses import dataclass
|
|
13
|
-
from typing import Any, Dict, List, Optional, Union
|
|
14
|
+
from typing import Any, Dict, List, Optional, Tuple, Union
|
|
14
15
|
from urllib.parse import parse_qs as urllib_parse_qs
|
|
15
16
|
from urllib.parse import urlencode, urlparse
|
|
16
17
|
|
|
@@ -377,6 +378,7 @@ def exchange_code_for_tokens(
|
|
|
377
378
|
# Models known to work with ChatGPT OAuth tokens (sourced from codex-rs CLI
|
|
378
379
|
# and shell-scripts/codex-call.sh).
|
|
379
380
|
DEFAULT_CODEX_MODELS = [
|
|
381
|
+
"gpt-6-astra",
|
|
380
382
|
"gpt-5.6-sol",
|
|
381
383
|
"gpt-5.6-terra",
|
|
382
384
|
"gpt-5.6-luna",
|
|
@@ -399,17 +401,39 @@ CODEX_MODEL_CONTEXT_LENGTHS = {
|
|
|
399
401
|
}
|
|
400
402
|
|
|
401
403
|
|
|
404
|
+
_GPT_VERSION_RE = re.compile(r"^gpt-(\d+)(?:\.(\d+))?")
|
|
405
|
+
|
|
406
|
+
|
|
407
|
+
def _gpt_version(model_name: str) -> Optional[Tuple[int, int]]:
|
|
408
|
+
"""``(major, minor)`` for a ``gpt-X[.Y]...`` Codex slug, else ``None``.
|
|
409
|
+
|
|
410
|
+
Kept local (rather than importing ``code_puppy.model_utils``) so this
|
|
411
|
+
plugin doesn't hard-require a core release that ships the shared helper.
|
|
412
|
+
"""
|
|
413
|
+
match = _GPT_VERSION_RE.match(model_name.lower())
|
|
414
|
+
if not match:
|
|
415
|
+
return None
|
|
416
|
+
return int(match.group(1)), int(match.group(2) or 0)
|
|
417
|
+
|
|
418
|
+
|
|
419
|
+
def _gpt_at_least(model_name: str, minimum: Tuple[int, int]) -> bool:
|
|
420
|
+
version = _gpt_version(model_name)
|
|
421
|
+
return version is not None and version >= minimum
|
|
422
|
+
|
|
423
|
+
|
|
402
424
|
def _supports_xhigh_reasoning(model_name: str) -> bool:
|
|
403
425
|
"""Return whether a ChatGPT OAuth model supports xhigh reasoning."""
|
|
404
|
-
|
|
405
|
-
return "codex" in normalized_model_name or normalized_model_name.startswith(
|
|
406
|
-
("gpt-5.4", "gpt-5.5", "gpt-5.6")
|
|
407
|
-
)
|
|
426
|
+
return "codex" in model_name.lower() or _gpt_at_least(model_name, (5, 4))
|
|
408
427
|
|
|
409
428
|
|
|
410
429
|
def _supports_max_reasoning(model_name: str) -> bool:
|
|
411
430
|
"""Return whether a ChatGPT OAuth model supports max reasoning effort."""
|
|
412
|
-
return model_name
|
|
431
|
+
return _gpt_at_least(model_name, (5, 6))
|
|
432
|
+
|
|
433
|
+
|
|
434
|
+
def _supports_responses_reasoning_controls(model_name: str) -> bool:
|
|
435
|
+
"""GPT-5.6+ (incl. GPT-6) expose reasoning_context / reasoning_mode."""
|
|
436
|
+
return _gpt_at_least(model_name, (5, 6))
|
|
413
437
|
|
|
414
438
|
|
|
415
439
|
def fetch_chatgpt_models(access_token: str, account_id: str) -> List[CodexModelInfo]:
|
|
@@ -431,7 +455,7 @@ def fetch_chatgpt_models(access_token: str, account_id: str) -> List[CodexModelI
|
|
|
431
455
|
import platform
|
|
432
456
|
|
|
433
457
|
# Build the models URL with client version
|
|
434
|
-
client_version = CHATGPT_OAUTH_CONFIG.get("client_version", "0.
|
|
458
|
+
client_version = CHATGPT_OAUTH_CONFIG.get("client_version", "0.153.3")
|
|
435
459
|
base_url = CHATGPT_OAUTH_CONFIG["api_base_url"].rstrip("/")
|
|
436
460
|
models_url = f"{base_url}/models"
|
|
437
461
|
|
|
@@ -525,7 +549,7 @@ def add_models_to_extra_config(models: List[Union[str, CodexModelInfo]]) -> bool
|
|
|
525
549
|
# Responses-API models always support reasoning effort, summaries,
|
|
526
550
|
# and text verbosity; per-model extras are added below.
|
|
527
551
|
supported_settings = ["reasoning_effort", "summary", "verbosity"]
|
|
528
|
-
if model_name
|
|
552
|
+
if _supports_responses_reasoning_controls(model_name):
|
|
529
553
|
supported_settings.extend(["reasoning_context", "reasoning_mode"])
|
|
530
554
|
|
|
531
555
|
# xhigh: codex + GPT-5.4+; max: GPT-5.6+. Separate flags so a stronger
|
|
@@ -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
|