code-puppy-core-plugins 0.0.43__tar.gz → 0.0.45__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.43 → code_puppy_core_plugins-0.0.45}/PKG-INFO +1 -1
- code_puppy_core_plugins-0.0.45/code_puppy_core_plugins/claude_code_oauth/model_filter.py +98 -0
- code_puppy_core_plugins-0.0.45/code_puppy_core_plugins/claude_code_oauth/model_provider.py +164 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/claude_code_oauth/register_callbacks.py +24 -164
- code_puppy_core_plugins-0.0.45/code_puppy_core_plugins/claude_code_oauth/runtime_credentials.py +15 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/claude_code_oauth/token_refresh_heartbeat.py +1 -1
- code_puppy_core_plugins-0.0.45/code_puppy_core_plugins/claude_code_oauth/token_store.py +179 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/claude_code_oauth/utils.py +17 -166
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/pyproject.toml +1 -1
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/.gitignore +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/LICENSE +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/README.md +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/acp/README.md +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/acp/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/acp/agent.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/acp/bridge.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/acp/capabilities.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/acp/commands.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/acp/content.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/acp/io_delegation.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/acp/mcp_config.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/acp/permissions.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/acp/persistence.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/acp/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/acp/replay.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/acp/session.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/acp/session_config.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/acp/state.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/agent_creator_skill/SKILL.md +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/agent_creator_skill/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/agent_creator_skill/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/agent_skills/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/agent_skills/config.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/agent_skills/discovery.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/agent_skills/downloader.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/agent_skills/enabled_skills.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/agent_skills/installer.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/agent_skills/metadata.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/agent_skills/prompt_builder.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/agent_skills/provider.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/agent_skills/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/agent_skills/remote_catalog.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/agent_skills/skill_catalog.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/agent_skills/skill_commands.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/agent_skills/skills_install_menu.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/agent_skills/skills_menu.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/auto_continue/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/auto_continue/classifier.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/auto_continue/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/aws_bedrock/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/aws_bedrock/config.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/aws_bedrock/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/aws_bedrock/utils.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/azure_foundry/README.md +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/azure_foundry/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/azure_foundry/config.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/azure_foundry/discovery.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/azure_foundry/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/azure_foundry/token.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/azure_foundry/utils.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/btw/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/btw/inline_view.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/btw/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/btw/side_query.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/chatgpt_oauth/IMAGEGEN_SKILL.md +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/chatgpt_oauth/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/chatgpt_oauth/config.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/chatgpt_oauth/image_generation.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/chatgpt_oauth/image_tool.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/chatgpt_oauth/model_catalog.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/chatgpt_oauth/oauth_flow.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/chatgpt_oauth/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/chatgpt_oauth/test_plugin.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/chatgpt_oauth/usage.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/chatgpt_oauth/utils.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/claude_code_hooks/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/claude_code_hooks/config.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/claude_code_hooks/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/claude_code_hooks/trust.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/claude_code_oauth/README.md +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/claude_code_oauth/SETUP.md +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/claude_code_oauth/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/claude_code_oauth/config.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/claude_code_oauth/fast_mode.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/claude_code_oauth/prompt_handler.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/claude_code_oauth/test_plugin.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/code_puppy_agent/AGENTS_AND_TOOLS.md +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/code_puppy_agent/MODELS_AND_MCP.md +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/code_puppy_agent/PLUGINS_AND_CALLBACKS.md +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/code_puppy_agent/SESSIONS_AND_HISTORY.md +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/code_puppy_agent/SKILL.md +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/code_puppy_agent/SKILLS_SYSTEM.md +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/code_puppy_agent/SYSTEM_PROMPT_CONFIG_AND_I18N.md +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/code_puppy_agent/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/code_puppy_agent/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/completion_notification/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/completion_notification/config.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/completion_notification/locales/en-US.json +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/completion_notification/locales/es.json +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/completion_notification/locales/fr-CA.json +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/completion_notification/notifier.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/completion_notification/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/computer_use/NativeCapture.swift +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/computer_use/README.md +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/computer_use/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/computer_use/accessibility.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/computer_use/activation.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/computer_use/backend.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/computer_use/backend_types.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/computer_use/capture.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/computer_use/commands.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/computer_use/geometry.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/computer_use/inline_image.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/computer_use/keycodes.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/computer_use/policy.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/computer_use/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/computer_use/safety.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/computer_use/settle.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/computer_use/state.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/computer_use/tools.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/context_indicator/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/context_indicator/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/context_indicator/usage.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/copilot_auth/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/copilot_auth/config.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/copilot_auth/reasoning_client.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/copilot_auth/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/copilot_auth/utils.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/customizable_commands/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/customizable_commands/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/dbos_durable_exec/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/dbos_durable_exec/cancel.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/dbos_durable_exec/commands.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/dbos_durable_exec/config.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/dbos_durable_exec/lifecycle.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/dbos_durable_exec/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/dbos_durable_exec/runtime.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/dbos_durable_exec/startup_lock.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/dbos_durable_exec/workflow_ids.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/dbos_durable_exec/wrapper.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/destructive_command_guard/AGENTS.md +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/destructive_command_guard/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/destructive_command_guard/detector.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/destructive_command_guard/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/emoji_filter/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/emoji_filter/config.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/emoji_filter/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/emoji_filter/stripper.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/empty_html_comment_filter/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/example_custom_command/README.md +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/example_custom_command/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/file_permission_handler/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/file_permission_handler/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/flux_bootstrap/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/_docs/README.md +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/_docs/cheatsheet.md +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/_docs/pipeline.md +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/_docs/synopsis.md +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/about.md +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/address-feedback.md +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/ask.md +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/aug.md +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/auto-pilot.md +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/cheatsheet.md +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/commit.md +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/config.md +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/create-pr.md +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/exec.md +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/new.md +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/qa.md +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/rebase.md +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/review.md +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/split.md +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/squash-commits.md +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/status.md +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/tests.md +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/flux_bootstrap/bundled/scripts/flux_about.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/flux_bootstrap/bundled/scripts/flux_cheatsheet.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/flux_bootstrap/bundled/scripts/flux_status.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/flux_bootstrap/installer.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/flux_bootstrap/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/force_push_guard/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/force_push_guard/detector.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/force_push_guard/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/fork/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/fork/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/frontend_emitter/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/frontend_emitter/emitter.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/frontend_emitter/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/frontend_emitter/session_context.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/grok_oauth/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/grok_oauth/config.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/grok_oauth/oauth_flow.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/grok_oauth/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/grok_oauth/utils.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/herdr/README.md +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/herdr/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/herdr/client.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/herdr/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/herdr/reporter.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/herdr/smoke.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/herdr/sources.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/hook_creator/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/hook_creator/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/hook_manager/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/hook_manager/config.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/hook_manager/hooks_menu.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/hook_manager/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/hook_manager/trust_handler.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/logfire_oauth/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/logfire_oauth/oauth.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/logfire_oauth/query_tool.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/logfire_oauth/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/logfire_sessions/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/logfire_sessions/mirror.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/logfire_sessions/query.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/logfire_sessions/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/logfire_sessions/sync.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/meta_oauth/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/meta_oauth/config.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/meta_oauth/oauth_flow.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/meta_oauth/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/meta_oauth/utils.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/namespace_skill_search/README.md +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/namespace_skill_search/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/namespace_skill_search/namespaces.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/namespace_skill_search/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/namespace_skill_search/search_tool.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/no_tools/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/no_tools/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/oauth_pasteback.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/oauth_puppy_html.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/obsidian_agent/README.md +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/obsidian_agent/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/obsidian_agent/agent_obsidian.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/obsidian_agent/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/ollama/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/ollama/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/ollama_setup/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/ollama_setup/completer.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/ollama_setup/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/openrouter_oauth/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/openrouter_oauth/config.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/openrouter_oauth/oauth_flow.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/openrouter_oauth/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/openrouter_oauth/test_plugin.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/plugin_list/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/plugin_list/plugin_contributions.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/plugin_list/plugin_meta.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/plugin_list/plugin_text_utils.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/plugin_list/plugins_menu.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/plugin_list/plugins_menu_render.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/plugin_list/project_trust_flow.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/plugin_list/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/pop_command/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/pop_command/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/profiles/README.md +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/profiles/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/profiles/config.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/profiles/locales/en-US.json +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/profiles/menu.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/profiles/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/prompt_newline/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/prompt_newline/config.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/prompt_newline/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/prune/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/prune/prune_menu.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/prune/prune_model.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/prune/prune_render.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/prune/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/puppy_kennel/README.md +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/puppy_kennel/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/puppy_kennel/commands.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/puppy_kennel/config.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/puppy_kennel/kennel.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/puppy_kennel/packer.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/puppy_kennel/recorder.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/puppy_kennel/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/puppy_kennel/retriever.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/puppy_kennel/schema.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/puppy_kennel/state.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/puppy_kennel/tools.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/puppy_kennel/wings.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/puppy_spinner/README.md +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/puppy_spinner/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/puppy_spinner/builtin_frames.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/puppy_spinner/commands.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/puppy_spinner/picker.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/puppy_spinner/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/puppy_spinner/spinners.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/qa_kitten_skill/SKILL.md +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/qa_kitten_skill/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/qa_kitten_skill/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/quick_resume/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/quick_resume/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/review_pr/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/review_pr/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/session_namer/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/session_namer/namer.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/session_namer/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/spill/LICENSE.deepseek +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/spill/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/spill/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/spill/store.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/stack_dump/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/stack_dump/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/statusline/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/statusline/config.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/statusline/payload.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/statusline/prompt_patch.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/statusline/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/statusline/runner.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/statusline/statusline_command.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/steer_queue/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/steer_queue/queue_menu.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/steer_queue/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/subagent_panel/README.md +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/subagent_panel/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/subagent_panel/coalesce_patch.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/subagent_panel/panel_render.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/subagent_panel/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/subagent_panel/resume_repaint.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/subagent_panel/state.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/switch_agent_resume/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/switch_agent_resume/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/termflow_tui.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/theme/README.md +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/theme/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/theme/bundled_palettes.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/theme/content_styles.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/theme/osc_palette.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/theme/picker.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/theme/prompt_toolkit_theme.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/theme/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/theme/rich_themes.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/theme/themes.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/timestamp_heartbeat/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/timestamp_heartbeat/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/token_ratio_learner/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/token_ratio_learner/ratios.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/token_ratio_learner/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/universal_constructor/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/universal_constructor/models.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/universal_constructor/provider.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/universal_constructor/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/universal_constructor/registry.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/universal_constructor/sandbox.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/web_retriever_skill/SKILL.md +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/web_retriever_skill/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/web_retriever_skill/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/wiggum/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/wiggum/goal_runs.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/wiggum/judge.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/wiggum/judge_config.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/wiggum/judges_menu.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/wiggum/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/wiggum/state.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/code_puppy_core_plugins/yolo_cli/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.43 → code_puppy_core_plugins-0.0.45}/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.45
|
|
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,98 @@
|
|
|
1
|
+
"""Claude model generation filtering."""
|
|
2
|
+
|
|
3
|
+
import logging
|
|
4
|
+
import re
|
|
5
|
+
from typing import Dict, List, Tuple, Union
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
logger = logging.getLogger(__name__)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def filter_latest_claude_models(
|
|
12
|
+
models: List[str], max_per_family: Union[int, Dict[str, int]] = 2
|
|
13
|
+
) -> List[str]:
|
|
14
|
+
"""Filter models to keep the top N latest haiku, sonnet, and opus.
|
|
15
|
+
|
|
16
|
+
Parses model names in the format claude-{family}-{major}-{minor}-{date}
|
|
17
|
+
and returns the top ``max_per_family`` versions of each family
|
|
18
|
+
(haiku, sonnet, opus), sorted newest-first.
|
|
19
|
+
|
|
20
|
+
Args:
|
|
21
|
+
models: List of model name strings to filter.
|
|
22
|
+
max_per_family: Either a single int applied to all families, or a dict
|
|
23
|
+
mapping family name to its limit (e.g. ``{"opus": 3}``). Families
|
|
24
|
+
not present in the dict fall back to ``"default"`` key, or ``2``.
|
|
25
|
+
"""
|
|
26
|
+
# Dedupe while preserving order: base and "-long" config entries share the
|
|
27
|
+
# same underlying model name, and a duplicate must not consume a slot of
|
|
28
|
+
# the per-family limit (e.g. [opus-5, opus-5, opus-4-8] silently dropping
|
|
29
|
+
# opus-4-7 at limit 3).
|
|
30
|
+
models = list(dict.fromkeys(models))
|
|
31
|
+
|
|
32
|
+
# Collect all parsed models per family
|
|
33
|
+
# family -> list of (model_name, major, minor, date)
|
|
34
|
+
family_models: Dict[str, List[Tuple[str, int, int, int]]] = {}
|
|
35
|
+
|
|
36
|
+
for model_name in models:
|
|
37
|
+
if model_name == "claude-opus-5":
|
|
38
|
+
family_models.setdefault("opus", []).append((model_name, 5, 0, 0))
|
|
39
|
+
continue
|
|
40
|
+
if model_name == "claude-opus-4-8":
|
|
41
|
+
family_models.setdefault("opus", []).append((model_name, 4, 8, 20250301))
|
|
42
|
+
continue
|
|
43
|
+
if model_name == "claude-opus-4-7":
|
|
44
|
+
family_models.setdefault("opus", []).append((model_name, 4, 7, 20250219))
|
|
45
|
+
continue
|
|
46
|
+
if model_name == "claude-opus-4-6":
|
|
47
|
+
family_models.setdefault("opus", []).append((model_name, 4, 6, 20260205))
|
|
48
|
+
continue
|
|
49
|
+
if model_name == "claude-sonnet-4-6":
|
|
50
|
+
family_models.setdefault("sonnet", []).append((model_name, 4, 6, 20250610))
|
|
51
|
+
continue
|
|
52
|
+
if model_name == "claude-sonnet-5":
|
|
53
|
+
family_models.setdefault("sonnet", []).append((model_name, 5, 0, 0))
|
|
54
|
+
continue
|
|
55
|
+
if model_name == "claude-fable-5":
|
|
56
|
+
family_models.setdefault("fable", []).append((model_name, 5, 0, 0))
|
|
57
|
+
continue
|
|
58
|
+
if model_name == "claude-fable-5-1":
|
|
59
|
+
family_models.setdefault("fable", []).append((model_name, 5, 1, 0))
|
|
60
|
+
continue
|
|
61
|
+
# Match pattern: claude-{family}-{major}-{minor}-{date}
|
|
62
|
+
# Examples: claude-haiku-3-5-20241022, claude-sonnet-4-5-20250929
|
|
63
|
+
match = re.match(r"claude-(haiku|sonnet|opus)-(\d+)-(\d+)-(\d+)", model_name)
|
|
64
|
+
if not match:
|
|
65
|
+
# Also try pattern with dots: claude-{family}-{major}.{minor}-{date}
|
|
66
|
+
match = re.match(
|
|
67
|
+
r"claude-(haiku|sonnet|opus)-(\d+)\.(\d+)-(\d+)", model_name
|
|
68
|
+
)
|
|
69
|
+
|
|
70
|
+
if not match:
|
|
71
|
+
continue
|
|
72
|
+
|
|
73
|
+
family = match.group(1)
|
|
74
|
+
major = int(match.group(2))
|
|
75
|
+
minor = int(match.group(3))
|
|
76
|
+
date = int(match.group(4))
|
|
77
|
+
|
|
78
|
+
family_models.setdefault(family, []).append((model_name, major, minor, date))
|
|
79
|
+
|
|
80
|
+
# Sort each family descending and keep the top N
|
|
81
|
+
filtered: List[str] = []
|
|
82
|
+
for family, family_entries in family_models.items():
|
|
83
|
+
if isinstance(max_per_family, dict):
|
|
84
|
+
limit = max_per_family.get(family, max_per_family.get("default", 2))
|
|
85
|
+
else:
|
|
86
|
+
limit = max_per_family
|
|
87
|
+
family_entries.sort(key=lambda e: (e[1], e[2], e[3]), reverse=True)
|
|
88
|
+
for entry in family_entries[:limit]:
|
|
89
|
+
filtered.append(entry[0])
|
|
90
|
+
|
|
91
|
+
logger.info(
|
|
92
|
+
"Filtered %d models to %d latest models (max_per_family=%s): %s",
|
|
93
|
+
len(models),
|
|
94
|
+
len(filtered),
|
|
95
|
+
max_per_family,
|
|
96
|
+
filtered,
|
|
97
|
+
)
|
|
98
|
+
return filtered
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
"""Claude OAuth model construction; registration lives in register_callbacks."""
|
|
2
|
+
|
|
3
|
+
from typing import Any, Dict
|
|
4
|
+
|
|
5
|
+
from code_puppy.i18n import t
|
|
6
|
+
from code_puppy.messaging import emit_warning
|
|
7
|
+
from code_puppy.provider_identity import (
|
|
8
|
+
make_anthropic_provider,
|
|
9
|
+
resolve_provider_identity,
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
from .fast_mode import (
|
|
13
|
+
FAST_SETTING_KEY,
|
|
14
|
+
ensure_fast_beta_header,
|
|
15
|
+
patch_anthropic_client_fast_mode,
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def create_claude_code_model(model_name: str, model_config: Dict, config: Dict) -> Any:
|
|
20
|
+
"""Create a Claude Code model instance.
|
|
21
|
+
|
|
22
|
+
This handler is registered via the 'register_model_type' callback to handle
|
|
23
|
+
models with type='claude_code'.
|
|
24
|
+
"""
|
|
25
|
+
from anthropic import AsyncAnthropic
|
|
26
|
+
from pydantic_ai.models.anthropic import AnthropicModel
|
|
27
|
+
|
|
28
|
+
from code_puppy.claude_cache_client import ClaudeCacheAsyncClient
|
|
29
|
+
from code_puppy.http_utils import get_cert_bundle_path
|
|
30
|
+
from code_puppy.model_factory import (
|
|
31
|
+
CONTEXT_1M_BETA,
|
|
32
|
+
get_custom_config,
|
|
33
|
+
make_model_settings,
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
from . import register_callbacks as callbacks
|
|
37
|
+
|
|
38
|
+
get_valid_access_token = callbacks.get_valid_access_token
|
|
39
|
+
_reauthenticate_after_expired_oauth = callbacks._reauthenticate_after_expired_oauth
|
|
40
|
+
url, headers, verify, api_key, timeout = get_custom_config(model_config)
|
|
41
|
+
|
|
42
|
+
# Refresh token if this is from the plugin
|
|
43
|
+
if model_config.get("oauth_source") == "claude-code-plugin":
|
|
44
|
+
refreshed_token = get_valid_access_token()
|
|
45
|
+
api_key = refreshed_token
|
|
46
|
+
if refreshed_token:
|
|
47
|
+
custom_endpoint = model_config.get("custom_endpoint")
|
|
48
|
+
if isinstance(custom_endpoint, dict):
|
|
49
|
+
custom_endpoint["api_key"] = refreshed_token
|
|
50
|
+
|
|
51
|
+
if not api_key:
|
|
52
|
+
emit_warning(
|
|
53
|
+
t(
|
|
54
|
+
"oauth.claude.model.no_api_key",
|
|
55
|
+
model=model_config.get("name") or "(unknown)",
|
|
56
|
+
)
|
|
57
|
+
)
|
|
58
|
+
return None
|
|
59
|
+
|
|
60
|
+
# Interleaved thinking (defaults True for OAuth models). NOTE: read via
|
|
61
|
+
# get_all_model_settings — these plugin-owned settings aren't in core's
|
|
62
|
+
# supported_settings allowlist (see fast_mode.FAST_SETTING_KEY).
|
|
63
|
+
from code_puppy.config import get_all_model_settings
|
|
64
|
+
|
|
65
|
+
per_model_settings = get_all_model_settings(model_name)
|
|
66
|
+
interleaved_thinking = per_model_settings.get("interleaved_thinking", True)
|
|
67
|
+
fast_enabled = bool(per_model_settings.get(FAST_SETTING_KEY, False))
|
|
68
|
+
|
|
69
|
+
# Handle anthropic-beta header based on interleaved_thinking setting
|
|
70
|
+
if "anthropic-beta" in headers:
|
|
71
|
+
beta_parts = [p.strip() for p in headers["anthropic-beta"].split(",")]
|
|
72
|
+
if interleaved_thinking:
|
|
73
|
+
if "interleaved-thinking-2025-05-14" not in beta_parts:
|
|
74
|
+
beta_parts.append("interleaved-thinking-2025-05-14")
|
|
75
|
+
else:
|
|
76
|
+
beta_parts = [p for p in beta_parts if "interleaved-thinking" not in p]
|
|
77
|
+
headers["anthropic-beta"] = ",".join(beta_parts) if beta_parts else None
|
|
78
|
+
if headers.get("anthropic-beta") is None:
|
|
79
|
+
del headers["anthropic-beta"]
|
|
80
|
+
elif interleaved_thinking:
|
|
81
|
+
headers["anthropic-beta"] = "interleaved-thinking-2025-05-14"
|
|
82
|
+
|
|
83
|
+
# Add 1M context beta header for long-context models
|
|
84
|
+
if model_config.get("context_length", 0) >= 1_000_000:
|
|
85
|
+
if "anthropic-beta" in headers:
|
|
86
|
+
beta_parts = [p.strip() for p in headers["anthropic-beta"].split(",")]
|
|
87
|
+
if CONTEXT_1M_BETA not in beta_parts:
|
|
88
|
+
beta_parts.append(CONTEXT_1M_BETA)
|
|
89
|
+
headers["anthropic-beta"] = ",".join(beta_parts)
|
|
90
|
+
else:
|
|
91
|
+
headers["anthropic-beta"] = CONTEXT_1M_BETA
|
|
92
|
+
|
|
93
|
+
# Fast mode: append fast-mode-2026-02-01 beta marker when enabled
|
|
94
|
+
ensure_fast_beta_header(headers, fast_enabled)
|
|
95
|
+
|
|
96
|
+
# Use a dedicated client wrapper for OAuth refresh and tool-name transport
|
|
97
|
+
# transformations; prompt-cache markers are owned by model settings.
|
|
98
|
+
if verify is None:
|
|
99
|
+
verify = get_cert_bundle_path()
|
|
100
|
+
|
|
101
|
+
# No HTTP/2 for OAuth: the UnprefixingStream tool-name rewrite breaks under
|
|
102
|
+
# HTTP/2's compression handling, causing zlib decompression errors.
|
|
103
|
+
kwargs = {}
|
|
104
|
+
# Plugin releases land before core. Old transports keep their legacy path.
|
|
105
|
+
import inspect
|
|
106
|
+
from .runtime_credentials import current_token, refresh_token
|
|
107
|
+
|
|
108
|
+
if "oauth_token_provider" in inspect.signature(ClaudeCacheAsyncClient).parameters:
|
|
109
|
+
kwargs.update(
|
|
110
|
+
oauth_token_provider=current_token, oauth_refresh_callback=refresh_token
|
|
111
|
+
)
|
|
112
|
+
client = ClaudeCacheAsyncClient(
|
|
113
|
+
**kwargs,
|
|
114
|
+
headers=headers,
|
|
115
|
+
verify=verify,
|
|
116
|
+
timeout=180,
|
|
117
|
+
http2=False,
|
|
118
|
+
# Claude Code OAuth requires the ``cp_`` tool-name prefix; the wire
|
|
119
|
+
# format Anthropic's CLI uses won't accept un-prefixed tools.
|
|
120
|
+
apply_claude_code_prefix=True,
|
|
121
|
+
oauth_reauthentication_callback=lambda: _reauthenticate_after_expired_oauth(
|
|
122
|
+
model_name
|
|
123
|
+
),
|
|
124
|
+
)
|
|
125
|
+
|
|
126
|
+
anthropic_client = AsyncAnthropic(
|
|
127
|
+
base_url=url,
|
|
128
|
+
http_client=client,
|
|
129
|
+
auth_token=api_key,
|
|
130
|
+
)
|
|
131
|
+
|
|
132
|
+
def _update_runtime_token(access_token: str) -> None:
|
|
133
|
+
anthropic_client.auth_token = access_token
|
|
134
|
+
custom_endpoint = model_config.get("custom_endpoint")
|
|
135
|
+
if isinstance(custom_endpoint, dict):
|
|
136
|
+
custom_endpoint["api_key"] = access_token
|
|
137
|
+
|
|
138
|
+
client.set_token_update_callback(_update_runtime_token)
|
|
139
|
+
# Fast mode wrapper re-reads the setting on every call so
|
|
140
|
+
# /claude-code-fast takes effect live.
|
|
141
|
+
|
|
142
|
+
patch_anthropic_client_fast_mode(anthropic_client, model_name)
|
|
143
|
+
anthropic_client.api_key = None
|
|
144
|
+
anthropic_client.auth_token = api_key
|
|
145
|
+
provider = make_anthropic_provider(
|
|
146
|
+
resolve_provider_identity(model_name, model_config),
|
|
147
|
+
anthropic_client=anthropic_client,
|
|
148
|
+
)
|
|
149
|
+
# Prompt caching belongs to pydantic-ai's native Anthropic settings, not
|
|
150
|
+
# the transport shim. OAuth subscription models receive the free one-hour
|
|
151
|
+
# TTL at all three cache breakpoints.
|
|
152
|
+
model_settings = make_model_settings(model_name)
|
|
153
|
+
model_settings.update(
|
|
154
|
+
{
|
|
155
|
+
"anthropic_cache_instructions": "1h",
|
|
156
|
+
"anthropic_cache_tool_definitions": "1h",
|
|
157
|
+
"anthropic_cache_messages": "1h",
|
|
158
|
+
}
|
|
159
|
+
)
|
|
160
|
+
return AnthropicModel(
|
|
161
|
+
model_name=model_config["name"],
|
|
162
|
+
provider=provider,
|
|
163
|
+
settings=model_settings,
|
|
164
|
+
)
|
|
@@ -18,19 +18,13 @@ from code_puppy.callbacks import register_callback
|
|
|
18
18
|
from code_puppy.i18n import t
|
|
19
19
|
from code_puppy.messaging import emit_error, emit_info, emit_success, emit_warning
|
|
20
20
|
from code_puppy.model_switching import set_model_and_reload_agent
|
|
21
|
-
from code_puppy.provider_identity import (
|
|
22
|
-
make_anthropic_provider,
|
|
23
|
-
resolve_provider_identity,
|
|
24
|
-
)
|
|
25
21
|
|
|
26
22
|
from ..oauth_pasteback import parse_oauth_callback_input, read_available_stdin_line
|
|
27
23
|
from ..oauth_puppy_html import oauth_failure_html, oauth_success_html
|
|
28
24
|
from .config import CLAUDE_CODE_OAUTH_CONFIG, get_token_storage_path
|
|
29
25
|
from .fast_mode import (
|
|
30
26
|
FAST_SETTING_KEY,
|
|
31
|
-
ensure_fast_beta_header,
|
|
32
27
|
is_fast_mode_enabled,
|
|
33
|
-
patch_anthropic_client_fast_mode,
|
|
34
28
|
)
|
|
35
29
|
from .prompt_handler import prepare_claude_code_prompt
|
|
36
30
|
from .utils import (
|
|
@@ -462,7 +456,9 @@ def _handle_custom_command(command: str, name: str) -> Optional[bool]:
|
|
|
462
456
|
if name == "claude-code-logout":
|
|
463
457
|
token_path = get_token_storage_path()
|
|
464
458
|
if token_path.exists():
|
|
465
|
-
|
|
459
|
+
from .token_store import remove_tokens
|
|
460
|
+
|
|
461
|
+
remove_tokens()
|
|
466
462
|
emit_info(t("oauth.claude.cmd.logout.tokens_removed"))
|
|
467
463
|
|
|
468
464
|
removed = remove_claude_code_models()
|
|
@@ -475,138 +471,10 @@ def _handle_custom_command(command: str, name: str) -> Optional[bool]:
|
|
|
475
471
|
return None
|
|
476
472
|
|
|
477
473
|
|
|
478
|
-
def _create_claude_code_model(model_name
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
This handler is registered via the 'register_model_type' callback to handle
|
|
482
|
-
models with type='claude_code'.
|
|
483
|
-
"""
|
|
484
|
-
from anthropic import AsyncAnthropic
|
|
485
|
-
from pydantic_ai.models.anthropic import AnthropicModel
|
|
486
|
-
|
|
487
|
-
from code_puppy.claude_cache_client import ClaudeCacheAsyncClient
|
|
488
|
-
from code_puppy.http_utils import get_cert_bundle_path
|
|
489
|
-
from code_puppy.model_factory import (
|
|
490
|
-
CONTEXT_1M_BETA,
|
|
491
|
-
get_custom_config,
|
|
492
|
-
make_model_settings,
|
|
493
|
-
)
|
|
494
|
-
|
|
495
|
-
url, headers, verify, api_key, timeout = get_custom_config(model_config)
|
|
496
|
-
|
|
497
|
-
# Refresh token if this is from the plugin
|
|
498
|
-
if model_config.get("oauth_source") == "claude-code-plugin":
|
|
499
|
-
refreshed_token = get_valid_access_token()
|
|
500
|
-
if refreshed_token:
|
|
501
|
-
api_key = refreshed_token
|
|
502
|
-
custom_endpoint = model_config.get("custom_endpoint")
|
|
503
|
-
if isinstance(custom_endpoint, dict):
|
|
504
|
-
custom_endpoint["api_key"] = refreshed_token
|
|
505
|
-
|
|
506
|
-
if not api_key:
|
|
507
|
-
emit_warning(
|
|
508
|
-
t(
|
|
509
|
-
"oauth.claude.model.no_api_key",
|
|
510
|
-
model=model_config.get("name") or "(unknown)",
|
|
511
|
-
)
|
|
512
|
-
)
|
|
513
|
-
return None
|
|
474
|
+
def _create_claude_code_model(model_name, model_config, config):
|
|
475
|
+
from .model_provider import create_claude_code_model
|
|
514
476
|
|
|
515
|
-
|
|
516
|
-
# get_all_model_settings — these plugin-owned settings aren't in core's
|
|
517
|
-
# supported_settings allowlist (see fast_mode.FAST_SETTING_KEY).
|
|
518
|
-
from code_puppy.config import get_all_model_settings
|
|
519
|
-
|
|
520
|
-
per_model_settings = get_all_model_settings(model_name)
|
|
521
|
-
interleaved_thinking = per_model_settings.get("interleaved_thinking", True)
|
|
522
|
-
fast_enabled = bool(per_model_settings.get(FAST_SETTING_KEY, False))
|
|
523
|
-
|
|
524
|
-
# Handle anthropic-beta header based on interleaved_thinking setting
|
|
525
|
-
if "anthropic-beta" in headers:
|
|
526
|
-
beta_parts = [p.strip() for p in headers["anthropic-beta"].split(",")]
|
|
527
|
-
if interleaved_thinking:
|
|
528
|
-
if "interleaved-thinking-2025-05-14" not in beta_parts:
|
|
529
|
-
beta_parts.append("interleaved-thinking-2025-05-14")
|
|
530
|
-
else:
|
|
531
|
-
beta_parts = [p for p in beta_parts if "interleaved-thinking" not in p]
|
|
532
|
-
headers["anthropic-beta"] = ",".join(beta_parts) if beta_parts else None
|
|
533
|
-
if headers.get("anthropic-beta") is None:
|
|
534
|
-
del headers["anthropic-beta"]
|
|
535
|
-
elif interleaved_thinking:
|
|
536
|
-
headers["anthropic-beta"] = "interleaved-thinking-2025-05-14"
|
|
537
|
-
|
|
538
|
-
# Add 1M context beta header for long-context models
|
|
539
|
-
if model_config.get("context_length", 0) >= 1_000_000:
|
|
540
|
-
if "anthropic-beta" in headers:
|
|
541
|
-
beta_parts = [p.strip() for p in headers["anthropic-beta"].split(",")]
|
|
542
|
-
if CONTEXT_1M_BETA not in beta_parts:
|
|
543
|
-
beta_parts.append(CONTEXT_1M_BETA)
|
|
544
|
-
headers["anthropic-beta"] = ",".join(beta_parts)
|
|
545
|
-
else:
|
|
546
|
-
headers["anthropic-beta"] = CONTEXT_1M_BETA
|
|
547
|
-
|
|
548
|
-
# Fast mode: append fast-mode-2026-02-01 beta marker when enabled
|
|
549
|
-
ensure_fast_beta_header(headers, fast_enabled)
|
|
550
|
-
|
|
551
|
-
# Use a dedicated client wrapper for OAuth refresh and tool-name transport
|
|
552
|
-
# transformations; prompt-cache markers are owned by model settings.
|
|
553
|
-
if verify is None:
|
|
554
|
-
verify = get_cert_bundle_path()
|
|
555
|
-
|
|
556
|
-
# No HTTP/2 for OAuth: the UnprefixingStream tool-name rewrite breaks under
|
|
557
|
-
# HTTP/2's compression handling, causing zlib decompression errors.
|
|
558
|
-
client = ClaudeCacheAsyncClient(
|
|
559
|
-
headers=headers,
|
|
560
|
-
verify=verify,
|
|
561
|
-
timeout=180,
|
|
562
|
-
http2=False,
|
|
563
|
-
# Claude Code OAuth requires the ``cp_`` tool-name prefix; the wire
|
|
564
|
-
# format Anthropic's CLI uses won't accept un-prefixed tools.
|
|
565
|
-
apply_claude_code_prefix=True,
|
|
566
|
-
oauth_reauthentication_callback=lambda: _reauthenticate_after_expired_oauth(
|
|
567
|
-
model_name
|
|
568
|
-
),
|
|
569
|
-
)
|
|
570
|
-
|
|
571
|
-
anthropic_client = AsyncAnthropic(
|
|
572
|
-
base_url=url,
|
|
573
|
-
http_client=client,
|
|
574
|
-
auth_token=api_key,
|
|
575
|
-
)
|
|
576
|
-
|
|
577
|
-
def _update_runtime_token(access_token: str) -> None:
|
|
578
|
-
anthropic_client.auth_token = access_token
|
|
579
|
-
custom_endpoint = model_config.get("custom_endpoint")
|
|
580
|
-
if isinstance(custom_endpoint, dict):
|
|
581
|
-
custom_endpoint["api_key"] = access_token
|
|
582
|
-
|
|
583
|
-
client.set_token_update_callback(_update_runtime_token)
|
|
584
|
-
# Fast mode wrapper re-reads the setting on every call so
|
|
585
|
-
# /claude-code-fast takes effect live.
|
|
586
|
-
|
|
587
|
-
patch_anthropic_client_fast_mode(anthropic_client, model_name)
|
|
588
|
-
anthropic_client.api_key = None
|
|
589
|
-
anthropic_client.auth_token = api_key
|
|
590
|
-
provider = make_anthropic_provider(
|
|
591
|
-
resolve_provider_identity(model_name, model_config),
|
|
592
|
-
anthropic_client=anthropic_client,
|
|
593
|
-
)
|
|
594
|
-
# Prompt caching belongs to pydantic-ai's native Anthropic settings, not
|
|
595
|
-
# the transport shim. OAuth subscription models receive the free one-hour
|
|
596
|
-
# TTL at all three cache breakpoints.
|
|
597
|
-
model_settings = make_model_settings(model_name)
|
|
598
|
-
model_settings.update(
|
|
599
|
-
{
|
|
600
|
-
"anthropic_cache_instructions": "1h",
|
|
601
|
-
"anthropic_cache_tool_definitions": "1h",
|
|
602
|
-
"anthropic_cache_messages": "1h",
|
|
603
|
-
}
|
|
604
|
-
)
|
|
605
|
-
return AnthropicModel(
|
|
606
|
-
model_name=model_config["name"],
|
|
607
|
-
provider=provider,
|
|
608
|
-
settings=model_settings,
|
|
609
|
-
)
|
|
477
|
+
return create_claude_code_model(model_name, model_config, config)
|
|
610
478
|
|
|
611
479
|
|
|
612
480
|
def _register_model_types() -> List[Dict[str, Any]]:
|
|
@@ -624,12 +492,7 @@ async def _on_agent_run_start(
|
|
|
624
492
|
model_name: str,
|
|
625
493
|
session_id: Optional[str] = None,
|
|
626
494
|
) -> None:
|
|
627
|
-
"""Start token refresh heartbeat for Claude Code OAuth models.
|
|
628
|
-
|
|
629
|
-
This callback is triggered when an agent run starts. If the model is a
|
|
630
|
-
Claude Code OAuth model, we start a background heartbeat to keep the
|
|
631
|
-
token fresh during long-running operations.
|
|
632
|
-
"""
|
|
495
|
+
"""Start token refresh heartbeat for Claude Code OAuth models."""
|
|
633
496
|
# Only start heartbeat for Claude Code models
|
|
634
497
|
if not model_name.startswith("claude-code"):
|
|
635
498
|
return
|
|
@@ -637,12 +500,14 @@ async def _on_agent_run_start(
|
|
|
637
500
|
try:
|
|
638
501
|
from .token_refresh_heartbeat import TokenRefreshHeartbeat
|
|
639
502
|
|
|
503
|
+
key = (agent_name, model_name, session_id)
|
|
504
|
+
existing = _active_heartbeats.get(key)
|
|
505
|
+
if existing:
|
|
506
|
+
existing[1] += 1
|
|
507
|
+
return
|
|
640
508
|
heartbeat = TokenRefreshHeartbeat()
|
|
509
|
+
_active_heartbeats[key] = [heartbeat, 1]
|
|
641
510
|
await heartbeat.start()
|
|
642
|
-
|
|
643
|
-
# Store heartbeat for cleanup, keyed by session_id
|
|
644
|
-
key = session_id or "default"
|
|
645
|
-
_active_heartbeats[key] = heartbeat
|
|
646
511
|
logger.debug(
|
|
647
512
|
"Started token refresh heartbeat for session %s (model: %s)",
|
|
648
513
|
key,
|
|
@@ -663,14 +528,16 @@ async def _on_agent_run_end(
|
|
|
663
528
|
response_text: Optional[str] = None,
|
|
664
529
|
metadata: Optional[Dict[str, Any]] = None,
|
|
665
530
|
) -> None:
|
|
666
|
-
"""Stop token refresh heartbeat when agent run ends.
|
|
667
|
-
|
|
668
|
-
This callback is triggered when an agent run completes (success or failure).
|
|
669
|
-
We stop any heartbeat that was started for this session.
|
|
670
|
-
"""
|
|
531
|
+
"""Stop token refresh heartbeat when agent run ends."""
|
|
671
532
|
# We don't use response_text or metadata, just cleanup the heartbeat
|
|
672
|
-
key =
|
|
673
|
-
|
|
533
|
+
key = (agent_name, model_name, session_id)
|
|
534
|
+
entry = _active_heartbeats.get(key)
|
|
535
|
+
if entry is None:
|
|
536
|
+
return
|
|
537
|
+
entry[1] -= 1
|
|
538
|
+
if entry[1]:
|
|
539
|
+
return
|
|
540
|
+
heartbeat = _active_heartbeats.pop(key)[0]
|
|
674
541
|
|
|
675
542
|
if heartbeat is not None:
|
|
676
543
|
try:
|
|
@@ -685,11 +552,7 @@ async def _on_agent_run_end(
|
|
|
685
552
|
|
|
686
553
|
|
|
687
554
|
def _hook_check_token_expiry() -> bool:
|
|
688
|
-
"""Hook: is the stored Claude Code OAuth token inside its refresh window?
|
|
689
|
-
|
|
690
|
-
Consumed by core's ``ClaudeCacheAsyncClient._check_stored_token_expiry``
|
|
691
|
-
(replacing a direct core->plugin import).
|
|
692
|
-
"""
|
|
555
|
+
"""Hook: is the stored Claude Code OAuth token inside its refresh window?"""
|
|
693
556
|
tokens = load_stored_tokens()
|
|
694
557
|
if not tokens:
|
|
695
558
|
return False
|
|
@@ -697,10 +560,7 @@ def _hook_check_token_expiry() -> bool:
|
|
|
697
560
|
|
|
698
561
|
|
|
699
562
|
def _hook_refresh_token() -> Optional[str]:
|
|
700
|
-
"""Hook: force a refresh-token exchange, returning the new access token.
|
|
701
|
-
|
|
702
|
-
Consumed by core's ``ClaudeCacheAsyncClient._refresh_claude_oauth_token``.
|
|
703
|
-
"""
|
|
563
|
+
"""Hook: force a refresh-token exchange, returning the new access token."""
|
|
704
564
|
return refresh_access_token(force=True)
|
|
705
565
|
|
|
706
566
|
|
code_puppy_core_plugins-0.0.45/code_puppy_core_plugins/claude_code_oauth/runtime_credentials.py
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"""Async credential providers for core's request-time OAuth lifecycle."""
|
|
2
|
+
|
|
3
|
+
import asyncio
|
|
4
|
+
|
|
5
|
+
from . import utils
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
async def current_token():
|
|
9
|
+
return await asyncio.to_thread(utils.get_valid_access_token)
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
async def refresh_token(*, rejected_token=None):
|
|
13
|
+
return await asyncio.to_thread(
|
|
14
|
+
utils.refresh_access_token, force=True, rejected_token=rejected_token
|
|
15
|
+
)
|
|
@@ -225,7 +225,7 @@ async def force_token_refresh() -> bool:
|
|
|
225
225
|
from .utils import refresh_access_token
|
|
226
226
|
|
|
227
227
|
logger.info("Forcing token refresh")
|
|
228
|
-
refreshed_token = refresh_access_token
|
|
228
|
+
refreshed_token = await asyncio.to_thread(refresh_access_token, force=True)
|
|
229
229
|
|
|
230
230
|
if refreshed_token:
|
|
231
231
|
_last_refresh_time = time.time()
|