code-puppy-core-plugins 0.0.6__tar.gz → 0.0.8__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.6 → code_puppy_core_plugins-0.0.8}/PKG-INFO +2 -1
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/acp/mcp_config.py +21 -13
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/acp/persistence.py +29 -15
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/acp/replay.py +14 -1
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/acp/session.py +4 -2
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/aws_bedrock/register_callbacks.py +16 -5
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/azure_foundry/register_callbacks.py +17 -6
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/claude_code_oauth/fast_mode.py +3 -4
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/claude_code_oauth/register_callbacks.py +28 -30
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/dbos_durable_exec/runtime.py +15 -20
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/dbos_durable_exec/wrapper.py +7 -7
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/emoji_filter/register_callbacks.py +106 -35
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/ollama/register_callbacks.py +2 -3
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/prune/prune_model.py +21 -2
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/spill/register_callbacks.py +13 -5
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/token_ratio_learner/register_callbacks.py +7 -2
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/pyproject.toml +2 -1
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/.gitignore +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/LICENSE +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/README.md +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/acp/README.md +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/acp/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/acp/agent.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/acp/bridge.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/acp/capabilities.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/acp/commands.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/acp/content.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/acp/io_delegation.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/acp/permissions.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/acp/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/acp/session_config.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/acp/state.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/agent_skills/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/agent_skills/config.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/agent_skills/discovery.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/agent_skills/downloader.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/agent_skills/enabled_skills.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/agent_skills/installer.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/agent_skills/metadata.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/agent_skills/prompt_builder.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/agent_skills/provider.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/agent_skills/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/agent_skills/remote_catalog.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/agent_skills/skill_catalog.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/agent_skills/skill_commands.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/agent_skills/skills_install_menu.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/agent_skills/skills_menu.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/aws_bedrock/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/aws_bedrock/config.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/aws_bedrock/utils.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/azure_foundry/README.md +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/azure_foundry/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/azure_foundry/config.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/azure_foundry/discovery.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/azure_foundry/token.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/azure_foundry/utils.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/btw/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/btw/inline_view.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/btw/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/btw/side_query.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/chatgpt_oauth/IMAGEGEN_SKILL.md +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/chatgpt_oauth/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/chatgpt_oauth/config.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/chatgpt_oauth/image_generation.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/chatgpt_oauth/image_tool.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/chatgpt_oauth/oauth_flow.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/chatgpt_oauth/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/chatgpt_oauth/test_plugin.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/chatgpt_oauth/usage.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/chatgpt_oauth/utils.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/claude_code_hooks/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/claude_code_hooks/config.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/claude_code_hooks/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/claude_code_oauth/README.md +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/claude_code_oauth/SETUP.md +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/claude_code_oauth/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/claude_code_oauth/config.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/claude_code_oauth/prompt_handler.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/claude_code_oauth/test_plugin.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/claude_code_oauth/token_refresh_heartbeat.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/claude_code_oauth/utils.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/code_puppy_agent/AGENTS_AND_TOOLS.md +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/code_puppy_agent/MODELS_AND_MCP.md +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/code_puppy_agent/PLUGINS_AND_CALLBACKS.md +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/code_puppy_agent/SESSIONS_AND_HISTORY.md +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/code_puppy_agent/SKILL.md +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/code_puppy_agent/SKILLS_SYSTEM.md +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/code_puppy_agent/SYSTEM_PROMPT_CONFIG_AND_I18N.md +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/code_puppy_agent/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/code_puppy_agent/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/computer_use/NativeCapture.swift +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/computer_use/README.md +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/computer_use/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/computer_use/accessibility.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/computer_use/activation.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/computer_use/backend.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/computer_use/backend_types.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/computer_use/capture.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/computer_use/commands.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/computer_use/geometry.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/computer_use/inline_image.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/computer_use/keycodes.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/computer_use/policy.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/computer_use/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/computer_use/safety.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/computer_use/settle.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/computer_use/state.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/computer_use/tools.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/context_indicator/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/context_indicator/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/context_indicator/usage.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/copilot_auth/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/copilot_auth/config.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/copilot_auth/reasoning_client.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/copilot_auth/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/copilot_auth/utils.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/customizable_commands/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/customizable_commands/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/dbos_durable_exec/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/dbos_durable_exec/cancel.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/dbos_durable_exec/commands.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/dbos_durable_exec/config.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/dbos_durable_exec/lifecycle.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/dbos_durable_exec/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/dbos_durable_exec/startup_lock.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/dbos_durable_exec/workflow_ids.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/destructive_command_guard/AGENTS.md +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/destructive_command_guard/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/destructive_command_guard/detector.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/destructive_command_guard/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/emoji_filter/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/emoji_filter/config.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/emoji_filter/stripper.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/empty_html_comment_filter/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/example_custom_command/README.md +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/example_custom_command/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/file_permission_handler/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/file_permission_handler/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/flux_bootstrap/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/_docs/README.md +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/_docs/cheatsheet.md +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/_docs/pipeline.md +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/_docs/synopsis.md +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/about.md +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/address-feedback.md +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/ask.md +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/aug.md +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/auto-pilot.md +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/cheatsheet.md +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/commit.md +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/config.md +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/create-pr.md +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/exec.md +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/new.md +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/qa.md +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/rebase.md +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/review.md +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/split.md +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/squash-commits.md +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/status.md +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/tests.md +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/flux_bootstrap/bundled/scripts/flux_about.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/flux_bootstrap/bundled/scripts/flux_cheatsheet.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/flux_bootstrap/bundled/scripts/flux_status.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/flux_bootstrap/installer.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/flux_bootstrap/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/force_push_guard/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/force_push_guard/detector.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/force_push_guard/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/fork/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/fork/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/frontend_emitter/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/frontend_emitter/emitter.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/frontend_emitter/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/frontend_emitter/session_context.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/grok_oauth/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/grok_oauth/config.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/grok_oauth/oauth_flow.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/grok_oauth/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/grok_oauth/utils.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/herdr/README.md +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/herdr/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/herdr/client.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/herdr/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/herdr/reporter.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/herdr/smoke.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/herdr/sources.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/hook_creator/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/hook_creator/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/hook_manager/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/hook_manager/config.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/hook_manager/hooks_menu.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/hook_manager/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/meta_oauth/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/meta_oauth/config.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/meta_oauth/oauth_flow.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/meta_oauth/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/meta_oauth/utils.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/namespace_skill_search/README.md +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/namespace_skill_search/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/namespace_skill_search/namespaces.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/namespace_skill_search/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/namespace_skill_search/search_tool.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/no_tools/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/no_tools/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/oauth_pasteback.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/oauth_puppy_html.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/obsidian_agent/README.md +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/obsidian_agent/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/obsidian_agent/agent_obsidian.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/obsidian_agent/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/ollama/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/ollama_setup/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/ollama_setup/completer.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/ollama_setup/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/plugin_list/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/plugin_list/plugin_contributions.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/plugin_list/plugin_meta.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/plugin_list/plugin_text_utils.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/plugin_list/plugins_menu.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/plugin_list/plugins_menu_layout.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/plugin_list/plugins_menu_render.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/plugin_list/project_trust_flow.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/plugin_list/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/pop_command/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/pop_command/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/prompt_newline/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/prompt_newline/config.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/prompt_newline/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/prune/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/prune/prune_menu.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/prune/prune_render.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/prune/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/puppy_kennel/README.md +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/puppy_kennel/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/puppy_kennel/commands.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/puppy_kennel/config.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/puppy_kennel/kennel.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/puppy_kennel/packer.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/puppy_kennel/recorder.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/puppy_kennel/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/puppy_kennel/retriever.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/puppy_kennel/schema.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/puppy_kennel/state.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/puppy_kennel/tools.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/puppy_kennel/wings.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/puppy_spinner/README.md +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/puppy_spinner/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/puppy_spinner/builtin_frames.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/puppy_spinner/commands.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/puppy_spinner/picker.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/puppy_spinner/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/puppy_spinner/spinners.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/quick_resume/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/quick_resume/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/review_pr/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/review_pr/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/shell_safety/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/shell_safety/agent_shell_safety.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/shell_safety/command_cache.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/shell_safety/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/spill/LICENSE.deepseek +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/spill/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/spill/store.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/stack_dump/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/stack_dump/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/statusline/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/statusline/config.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/statusline/payload.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/statusline/prompt_patch.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/statusline/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/statusline/runner.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/statusline/statusline_command.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/steer_queue/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/steer_queue/queue_menu.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/steer_queue/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/subagent_panel/README.md +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/subagent_panel/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/subagent_panel/coalesce_patch.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/subagent_panel/panel_render.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/subagent_panel/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/subagent_panel/resume_repaint.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/subagent_panel/state.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/switch_agent_resume/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/switch_agent_resume/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/theme/README.md +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/theme/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/theme/bundled_palettes.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/theme/content_styles.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/theme/osc_palette.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/theme/picker.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/theme/prompt_toolkit_theme.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/theme/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/theme/rich_themes.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/theme/themes.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/timestamp_heartbeat/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/timestamp_heartbeat/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/token_ratio_learner/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/token_ratio_learner/ratios.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/universal_constructor/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/universal_constructor/models.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/universal_constructor/provider.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/universal_constructor/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/universal_constructor/registry.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/universal_constructor/sandbox.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/wide_completion_menu/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/wide_completion_menu/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/wiggum/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/wiggum/goal_runs.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/wiggum/judge.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/wiggum/judge_config.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/wiggum/judges_menu.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/wiggum/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/wiggum/state.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/code_puppy_core_plugins/yolo_cli/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.6 → code_puppy_core_plugins-0.0.8}/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.8
|
|
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
|
|
@@ -15,6 +15,7 @@ Classifier: Programming Language :: Python :: 3.12
|
|
|
15
15
|
Classifier: Programming Language :: Python :: 3.13
|
|
16
16
|
Requires-Python: <3.15,>=3.11
|
|
17
17
|
Requires-Dist: httpx<1,>=0.24.1
|
|
18
|
+
Requires-Dist: pydantic-ai-slim[anthropic,mcp,openai]<3,>=2.31.0
|
|
18
19
|
Description-Content-Type: text/markdown
|
|
19
20
|
|
|
20
21
|
# Code Puppy Core Plugins
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"""Attach client-injected MCP servers (from ``session/new``) to a session agent.
|
|
2
2
|
|
|
3
|
-
ACP lets the client pass MCP server specs per session. We translate each into
|
|
4
|
-
pydantic-ai
|
|
5
|
-
|
|
6
|
-
spec is skipped, never fatal.
|
|
3
|
+
ACP lets the client pass MCP server specs per session. We translate each into
|
|
4
|
+
the pydantic-ai v2 ``MCPToolset`` API and append it to the host agent's
|
|
5
|
+
MCP configuration; the session agent owns their lifecycle. Best-effort: a
|
|
6
|
+
malformed spec is skipped, never fatal.
|
|
7
7
|
"""
|
|
8
8
|
|
|
9
9
|
from __future__ import annotations
|
|
@@ -24,29 +24,37 @@ def _kv(items: Any) -> Dict[str, str]:
|
|
|
24
24
|
return out
|
|
25
25
|
|
|
26
26
|
|
|
27
|
+
def _with_prefix(toolset: Any, name: Optional[str]) -> Any:
|
|
28
|
+
"""Prefix tool names through the public toolset wrapper API."""
|
|
29
|
+
return toolset.prefixed(name) if name else toolset
|
|
30
|
+
|
|
31
|
+
|
|
27
32
|
def _translate(spec: Any) -> Optional[Any]:
|
|
28
|
-
"""Map one ACP MCP server spec to a pydantic-ai MCP
|
|
29
|
-
from
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
+
"""Map one ACP MCP server spec to a pydantic-ai MCP toolset."""
|
|
34
|
+
from fastmcp.client.transports import (
|
|
35
|
+
SSETransport,
|
|
36
|
+
StdioTransport,
|
|
37
|
+
StreamableHttpTransport,
|
|
33
38
|
)
|
|
39
|
+
from pydantic_ai.mcp import MCPToolset
|
|
34
40
|
|
|
35
41
|
name = getattr(spec, "name", None) or None
|
|
36
42
|
if getattr(spec, "command", None):
|
|
37
|
-
|
|
43
|
+
transport = StdioTransport(
|
|
38
44
|
command=spec.command,
|
|
39
45
|
args=list(getattr(spec, "args", None) or []),
|
|
40
46
|
env=_kv(getattr(spec, "env", None)) or None,
|
|
41
|
-
tool_prefix=name,
|
|
42
47
|
)
|
|
48
|
+
return _with_prefix(MCPToolset(transport, prefer_tasks=False), name)
|
|
43
49
|
url = getattr(spec, "url", None)
|
|
44
50
|
if not url:
|
|
45
51
|
return None
|
|
46
52
|
headers = _kv(getattr(spec, "headers", None)) or None
|
|
47
53
|
if getattr(spec, "type", None) == "sse":
|
|
48
|
-
|
|
49
|
-
|
|
54
|
+
transport = SSETransport(url=url, headers=headers)
|
|
55
|
+
else:
|
|
56
|
+
transport = StreamableHttpTransport(url=url, headers=headers)
|
|
57
|
+
return _with_prefix(MCPToolset(transport, prefer_tasks=False), name)
|
|
50
58
|
|
|
51
59
|
|
|
52
60
|
def attach(agent: Any, specs: List[Any]) -> None:
|
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
"""Persist ACP session history so ``session/load`` and ``session/resume``
|
|
2
2
|
rehydrate real turns across process restarts.
|
|
3
3
|
|
|
4
|
-
Each session's pydantic-ai message history is
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
Each session's pydantic-ai message history is saved through code-puppy's
|
|
5
|
+
versioned JSON ``session_storage`` envelope under a dedicated directory keyed
|
|
6
|
+
by the ACP session id. A legacy pickle twin may exist while older core
|
|
7
|
+
versions are supported; JSON is always preferred and pickle is only a
|
|
8
|
+
fallback. We keep the directory separate from the user's autosaves
|
|
7
9
|
(``AUTOSAVE_DIR/acp``) so ACP threads never pollute the ``/resume`` picker.
|
|
8
10
|
|
|
9
|
-
Alongside the
|
|
10
|
-
recording the session's own ``cwd`` +
|
|
11
|
-
lets ``list_persisted`` surface
|
|
12
|
-
restart *with the ``cwd`` that ACP's
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
ACP threads.
|
|
11
|
+
Alongside the session envelope we write a small ACP metadata sidecar
|
|
12
|
+
(``*_acp.json``) recording the session's own ``cwd`` +
|
|
13
|
+
``additional_directories``. This is what lets ``list_persisted`` surface
|
|
14
|
+
revivable sessions after a restart *with the ``cwd`` that ACP's
|
|
15
|
+
``SessionInfo`` requires* -- the core session metadata records the process
|
|
16
|
+
cwd, which is wrong for per-session ACP threads.
|
|
16
17
|
|
|
17
18
|
Every public entry point takes an optional ``base_dir``: production callers
|
|
18
19
|
omit it (it defaults to ``AUTOSAVE_DIR/acp``), while tests pass an explicit
|
|
@@ -57,7 +58,7 @@ def _resolve_base(base_dir: Optional[Path]) -> Path:
|
|
|
57
58
|
|
|
58
59
|
|
|
59
60
|
def _safe_name(session_id: str) -> str:
|
|
60
|
-
"""Sanitise a session id into a filesystem-safe
|
|
61
|
+
"""Sanitise a session id into a filesystem-safe session stem."""
|
|
61
62
|
return "".join(c if (c.isalnum() or c in "-_") else "_" for c in session_id)
|
|
62
63
|
|
|
63
64
|
|
|
@@ -145,12 +146,24 @@ def load_history(
|
|
|
145
146
|
return None
|
|
146
147
|
|
|
147
148
|
|
|
149
|
+
def _session_file_exists(base: Path, session_id: str) -> bool:
|
|
150
|
+
"""Return whether the JSON session or legacy pickle is available.
|
|
151
|
+
|
|
152
|
+
The JSON envelope is the source of truth. The pickle check is retained
|
|
153
|
+
only so an ACP session written by an older core/plugin can still be
|
|
154
|
+
listed and lazily migrated by ``load_session``.
|
|
155
|
+
"""
|
|
156
|
+
stem = _safe_name(session_id)
|
|
157
|
+
return (base / f"{stem}.json").exists() or (base / f"{stem}.pkl").exists()
|
|
158
|
+
|
|
159
|
+
|
|
148
160
|
def list_persisted(base_dir: Optional[Path] = None) -> List[PersistedSession]:
|
|
149
161
|
"""Return every ACP session persisted on disk (newest first).
|
|
150
162
|
|
|
151
163
|
Reads the ACP metadata sidecars so revivable sessions survive process
|
|
152
|
-
restarts. A session whose
|
|
153
|
-
skipped -- there is nothing left to
|
|
164
|
+
restarts. A session whose JSON envelope and legacy pickle both vanished
|
|
165
|
+
(only the sidecar remains) is skipped -- there is nothing left to
|
|
166
|
+
rehydrate.
|
|
154
167
|
"""
|
|
155
168
|
base = _resolve_base(base_dir)
|
|
156
169
|
if not base.exists():
|
|
@@ -162,7 +175,7 @@ def list_persisted(base_dir: Optional[Path] = None) -> List[PersistedSession]:
|
|
|
162
175
|
session_id = data.get("session_id")
|
|
163
176
|
if not session_id:
|
|
164
177
|
continue
|
|
165
|
-
if not (base
|
|
178
|
+
if not _session_file_exists(base, session_id):
|
|
166
179
|
continue
|
|
167
180
|
records.append(
|
|
168
181
|
PersistedSession(
|
|
@@ -179,7 +192,7 @@ def list_persisted(base_dir: Optional[Path] = None) -> List[PersistedSession]:
|
|
|
179
192
|
|
|
180
193
|
|
|
181
194
|
def delete(session_id: str, base_dir: Optional[Path] = None) -> None:
|
|
182
|
-
"""Remove a persisted session's pickle + sidecars (best-effort).
|
|
195
|
+
"""Remove a persisted session's JSON/pickle files + sidecars (best-effort).
|
|
183
196
|
|
|
184
197
|
Called when a client explicitly closes a session so a deliberate close
|
|
185
198
|
doesn't leave a ghost that reappears in the next ``list_sessions``.
|
|
@@ -188,6 +201,7 @@ def delete(session_id: str, base_dir: Optional[Path] = None) -> None:
|
|
|
188
201
|
base = _resolve_base(base_dir)
|
|
189
202
|
stem = _safe_name(session_id)
|
|
190
203
|
for path in (
|
|
204
|
+
base / f"{stem}.json",
|
|
191
205
|
base / f"{stem}.pkl",
|
|
192
206
|
base / f"{stem}_meta.json",
|
|
193
207
|
_acp_meta_path(base, session_id),
|
|
@@ -77,7 +77,20 @@ def _updates_for_message(message: Any) -> List[Any]:
|
|
|
77
77
|
updates.append(update_agent_thought_text(text))
|
|
78
78
|
elif kind == "tool-call":
|
|
79
79
|
updates.append(_tool_call_update(part))
|
|
80
|
-
|
|
80
|
+
elif kind in {"system-prompt", "tool-return"}:
|
|
81
|
+
# Model plumbing, not conversation content.
|
|
82
|
+
continue
|
|
83
|
+
else:
|
|
84
|
+
# New v2 kinds (speech, compaction, tool-availability deltas, and
|
|
85
|
+
# future additions) must not make replay brittle. Preserve plain
|
|
86
|
+
# textual content when present; non-text plumbing is safely skipped.
|
|
87
|
+
text = _text_of(
|
|
88
|
+
getattr(part, "content", None)
|
|
89
|
+
if getattr(part, "content", None) is not None
|
|
90
|
+
else getattr(part, "transcript", None)
|
|
91
|
+
)
|
|
92
|
+
if text:
|
|
93
|
+
updates.append(update_agent_message_text(text))
|
|
81
94
|
return updates
|
|
82
95
|
|
|
83
96
|
|
|
@@ -306,10 +306,12 @@ def _to_acp_usage(result: Any) -> Optional[Usage]:
|
|
|
306
306
|
if result is None:
|
|
307
307
|
return None
|
|
308
308
|
try:
|
|
309
|
-
usage = result
|
|
309
|
+
usage = getattr(result, "usage", None)
|
|
310
|
+
# pydantic-ai 2.31.0 exposes usage as a property. Ignore an older
|
|
311
|
+
# method-style value rather than invoking its deprecated call path.
|
|
310
312
|
except Exception: # noqa: BLE001
|
|
311
313
|
return None
|
|
312
|
-
if usage is None:
|
|
314
|
+
if usage is None or callable(usage):
|
|
313
315
|
return None
|
|
314
316
|
|
|
315
317
|
def pick(*names: str) -> Optional[int]:
|
|
@@ -164,9 +164,8 @@ def _create_aws_bedrock_model(model_name: str, model_config: dict, config: dict)
|
|
|
164
164
|
)
|
|
165
165
|
return None
|
|
166
166
|
|
|
167
|
-
from code_puppy.claude_cache_client import patch_anthropic_client_messages
|
|
168
167
|
from code_puppy.config import get_effective_model_settings
|
|
169
|
-
from code_puppy.model_factory import CONTEXT_1M_BETA
|
|
168
|
+
from code_puppy.model_factory import CONTEXT_1M_BETA, make_model_settings
|
|
170
169
|
from code_puppy.provider_identity import (
|
|
171
170
|
make_anthropic_provider,
|
|
172
171
|
resolve_provider_identity,
|
|
@@ -206,15 +205,27 @@ def _create_aws_bedrock_model(model_name: str, model_config: dict, config: dict)
|
|
|
206
205
|
|
|
207
206
|
anthropic_client = AsyncAnthropicBedrock(**client_kwargs)
|
|
208
207
|
|
|
209
|
-
patch_anthropic_client_messages(anthropic_client)
|
|
210
|
-
|
|
211
208
|
provider_identity = resolve_provider_identity(model_name, model_config)
|
|
212
209
|
provider = make_anthropic_provider(
|
|
213
210
|
provider_identity,
|
|
214
211
|
anthropic_client=anthropic_client,
|
|
215
212
|
)
|
|
216
213
|
|
|
217
|
-
|
|
214
|
+
# Prompt caching is handled by pydantic-ai's native Anthropic
|
|
215
|
+
# settings at all three cache breakpoints.
|
|
216
|
+
model_settings = make_model_settings(model_name)
|
|
217
|
+
model_settings.update(
|
|
218
|
+
{
|
|
219
|
+
"anthropic_cache_instructions": True,
|
|
220
|
+
"anthropic_cache_tool_definitions": True,
|
|
221
|
+
"anthropic_cache_messages": True,
|
|
222
|
+
}
|
|
223
|
+
)
|
|
224
|
+
model = AnthropicModel(
|
|
225
|
+
model_name=model_id,
|
|
226
|
+
provider=provider,
|
|
227
|
+
settings=model_settings,
|
|
228
|
+
)
|
|
218
229
|
logger.info(
|
|
219
230
|
"Created Bedrock model: %s -> %s @ %s",
|
|
220
231
|
model_name,
|
|
@@ -317,9 +317,8 @@ def _create_azure_foundry_model(
|
|
|
317
317
|
)
|
|
318
318
|
return None
|
|
319
319
|
|
|
320
|
-
from code_puppy.claude_cache_client import patch_anthropic_client_messages
|
|
321
320
|
from code_puppy.config import get_effective_model_settings
|
|
322
|
-
from code_puppy.model_factory import CONTEXT_1M_BETA
|
|
321
|
+
from code_puppy.model_factory import CONTEXT_1M_BETA, make_model_settings
|
|
323
322
|
from code_puppy.provider_identity import (
|
|
324
323
|
make_anthropic_provider,
|
|
325
324
|
resolve_provider_identity,
|
|
@@ -381,9 +380,6 @@ def _create_azure_foundry_model(
|
|
|
381
380
|
default_headers=default_headers,
|
|
382
381
|
)
|
|
383
382
|
|
|
384
|
-
# Patch for cache control injection
|
|
385
|
-
patch_anthropic_client_messages(anthropic_client)
|
|
386
|
-
|
|
387
383
|
# Create the pydantic-ai provider and model
|
|
388
384
|
provider_identity = resolve_provider_identity(model_name, model_config)
|
|
389
385
|
provider = make_anthropic_provider(
|
|
@@ -391,7 +387,22 @@ def _create_azure_foundry_model(
|
|
|
391
387
|
anthropic_client=anthropic_client,
|
|
392
388
|
)
|
|
393
389
|
|
|
394
|
-
|
|
390
|
+
# Prompt caching is handled by pydantic-ai's native Anthropic
|
|
391
|
+
# settings; Foundry's API-key-style models use Anthropic's default
|
|
392
|
+
# five-minute cache TTL.
|
|
393
|
+
model_settings = make_model_settings(model_name)
|
|
394
|
+
model_settings.update(
|
|
395
|
+
{
|
|
396
|
+
"anthropic_cache_instructions": True,
|
|
397
|
+
"anthropic_cache_tool_definitions": True,
|
|
398
|
+
"anthropic_cache_messages": True,
|
|
399
|
+
}
|
|
400
|
+
)
|
|
401
|
+
model = AnthropicModel(
|
|
402
|
+
model_name=deployment_name,
|
|
403
|
+
provider=provider,
|
|
404
|
+
settings=model_settings,
|
|
405
|
+
)
|
|
395
406
|
logger.info(
|
|
396
407
|
"Created Azure Foundry model: %s -> %s @ %s",
|
|
397
408
|
model_name,
|
|
@@ -96,10 +96,9 @@ def make_fast_mode_wrapper(
|
|
|
96
96
|
def patch_anthropic_client_fast_mode(client: Any, model_name: str) -> None:
|
|
97
97
|
"""Monkey-patch ``messages.create`` (and ``beta.messages.create``).
|
|
98
98
|
|
|
99
|
-
Must be called
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
reason about.
|
|
99
|
+
Must be called after the Anthropic client is constructed. Keeping
|
|
100
|
+
fast-mode outermost makes the request-header transform easy to reason
|
|
101
|
+
about.
|
|
103
102
|
"""
|
|
104
103
|
try:
|
|
105
104
|
messages_obj = getattr(client, "messages", None)
|
|
@@ -32,7 +32,7 @@ from .fast_mode import (
|
|
|
32
32
|
is_fast_mode_enabled,
|
|
33
33
|
patch_anthropic_client_fast_mode,
|
|
34
34
|
)
|
|
35
|
-
from .prompt_handler import
|
|
35
|
+
from .prompt_handler import prepare_claude_code_prompt
|
|
36
36
|
from .utils import (
|
|
37
37
|
OAuthContext,
|
|
38
38
|
add_models_to_extra_config,
|
|
@@ -458,17 +458,6 @@ def _handle_custom_command(command: str, name: str) -> Optional[bool]:
|
|
|
458
458
|
return None
|
|
459
459
|
|
|
460
460
|
|
|
461
|
-
def _resolve_cache_ttl(model_name: str) -> Optional[str]:
|
|
462
|
-
"""Prompt-cache TTL for a claude_code-type model.
|
|
463
|
-
|
|
464
|
-
``claude-code-*`` models (OAuth subscription) always get the free 1-hour
|
|
465
|
-
TTL; anything else falls back to Anthropic's 5-minute default (None).
|
|
466
|
-
"""
|
|
467
|
-
from code_puppy.claude_cache_client import CACHE_TTL_1H
|
|
468
|
-
|
|
469
|
-
return CACHE_TTL_1H if is_claude_code_model(model_name) else None
|
|
470
|
-
|
|
471
|
-
|
|
472
461
|
def _create_claude_code_model(model_name: str, model_config: Dict, config: Dict) -> Any:
|
|
473
462
|
"""Create a Claude Code model instance.
|
|
474
463
|
|
|
@@ -478,12 +467,13 @@ def _create_claude_code_model(model_name: str, model_config: Dict, config: Dict)
|
|
|
478
467
|
from anthropic import AsyncAnthropic
|
|
479
468
|
from pydantic_ai.models.anthropic import AnthropicModel
|
|
480
469
|
|
|
481
|
-
from code_puppy.claude_cache_client import
|
|
482
|
-
ClaudeCacheAsyncClient,
|
|
483
|
-
patch_anthropic_client_messages,
|
|
484
|
-
)
|
|
470
|
+
from code_puppy.claude_cache_client import ClaudeCacheAsyncClient
|
|
485
471
|
from code_puppy.http_utils import get_cert_bundle_path
|
|
486
|
-
from code_puppy.model_factory import
|
|
472
|
+
from code_puppy.model_factory import (
|
|
473
|
+
CONTEXT_1M_BETA,
|
|
474
|
+
get_custom_config,
|
|
475
|
+
make_model_settings,
|
|
476
|
+
)
|
|
487
477
|
|
|
488
478
|
url, headers, verify, api_key, timeout = get_custom_config(model_config)
|
|
489
479
|
|
|
@@ -529,8 +519,6 @@ def _create_claude_code_model(model_name: str, model_config: Dict, config: Dict)
|
|
|
529
519
|
headers["anthropic-beta"] = "interleaved-thinking-2025-05-14"
|
|
530
520
|
|
|
531
521
|
# Add 1M context beta header for long-context models
|
|
532
|
-
from code_puppy.model_factory import CONTEXT_1M_BETA
|
|
533
|
-
|
|
534
522
|
if model_config.get("context_length", 0) >= 1_000_000:
|
|
535
523
|
if "anthropic-beta" in headers:
|
|
536
524
|
beta_parts = [p.strip() for p in headers["anthropic-beta"].split(",")]
|
|
@@ -543,15 +531,11 @@ def _create_claude_code_model(model_name: str, model_config: Dict, config: Dict)
|
|
|
543
531
|
# Fast mode: append fast-mode-2026-02-01 beta marker when enabled
|
|
544
532
|
ensure_fast_beta_header(headers, fast_enabled)
|
|
545
533
|
|
|
546
|
-
# Use a dedicated client wrapper
|
|
534
|
+
# Use a dedicated client wrapper for OAuth refresh and tool-name transport
|
|
535
|
+
# transformations; prompt-cache markers are owned by model settings.
|
|
547
536
|
if verify is None:
|
|
548
537
|
verify = get_cert_bundle_path()
|
|
549
538
|
|
|
550
|
-
# claude-code-* OAuth models get 1-hour prompt caching free, so they ALWAYS
|
|
551
|
-
# request the extended TTL; plain anthropic/custom_anthropic models keep the
|
|
552
|
-
# default 5-minute TTL — deliberately not applied to those.
|
|
553
|
-
cache_ttl = _resolve_cache_ttl(model_name)
|
|
554
|
-
|
|
555
539
|
# No HTTP/2 for OAuth: the UnprefixingStream tool-name rewrite breaks under
|
|
556
540
|
# HTTP/2's compression handling, causing zlib decompression errors.
|
|
557
541
|
client = ClaudeCacheAsyncClient(
|
|
@@ -562,7 +546,6 @@ def _create_claude_code_model(model_name: str, model_config: Dict, config: Dict)
|
|
|
562
546
|
# Claude Code OAuth requires the ``cp_`` tool-name prefix; the wire
|
|
563
547
|
# format Anthropic's CLI uses won't accept un-prefixed tools.
|
|
564
548
|
apply_claude_code_prefix=True,
|
|
565
|
-
cache_ttl=cache_ttl,
|
|
566
549
|
oauth_reauthentication_callback=lambda: _reauthenticate_after_expired_oauth(
|
|
567
550
|
model_name
|
|
568
551
|
),
|
|
@@ -581,9 +564,9 @@ def _create_claude_code_model(model_name: str, model_config: Dict, config: Dict)
|
|
|
581
564
|
custom_endpoint["api_key"] = access_token
|
|
582
565
|
|
|
583
566
|
client.set_token_update_callback(_update_runtime_token)
|
|
584
|
-
|
|
585
|
-
#
|
|
586
|
-
|
|
567
|
+
# Fast mode wrapper re-reads the setting on every call so
|
|
568
|
+
# /claude-code-fast takes effect live.
|
|
569
|
+
|
|
587
570
|
patch_anthropic_client_fast_mode(anthropic_client, model_name)
|
|
588
571
|
anthropic_client.api_key = None
|
|
589
572
|
anthropic_client.auth_token = api_key
|
|
@@ -591,7 +574,22 @@ def _create_claude_code_model(model_name: str, model_config: Dict, config: Dict)
|
|
|
591
574
|
resolve_provider_identity(model_name, model_config),
|
|
592
575
|
anthropic_client=anthropic_client,
|
|
593
576
|
)
|
|
594
|
-
|
|
577
|
+
# Prompt caching belongs to pydantic-ai's native Anthropic settings, not
|
|
578
|
+
# the transport shim. OAuth subscription models receive the free one-hour
|
|
579
|
+
# TTL at all three cache breakpoints.
|
|
580
|
+
model_settings = make_model_settings(model_name)
|
|
581
|
+
model_settings.update(
|
|
582
|
+
{
|
|
583
|
+
"anthropic_cache_instructions": "1h",
|
|
584
|
+
"anthropic_cache_tool_definitions": "1h",
|
|
585
|
+
"anthropic_cache_messages": "1h",
|
|
586
|
+
}
|
|
587
|
+
)
|
|
588
|
+
return AnthropicModel(
|
|
589
|
+
model_name=model_config["name"],
|
|
590
|
+
provider=provider,
|
|
591
|
+
settings=model_settings,
|
|
592
|
+
)
|
|
595
593
|
|
|
596
594
|
|
|
597
595
|
def _register_model_types() -> List[Dict[str, Any]]:
|
|
@@ -1,5 +1,9 @@
|
|
|
1
|
-
"""Async context manager wrapping pydantic_agent.run() with DBOS workflow ID
|
|
2
|
-
|
|
1
|
+
"""Async context manager wrapping pydantic_agent.run() with a DBOS workflow ID.
|
|
2
|
+
|
|
3
|
+
pydantic-ai 2.31.0's DBOSAgent converts constructor-level MCP toolsets to
|
|
4
|
+
DBOS-safe variants. Runtime private-toolset swaps are intentionally gone;
|
|
5
|
+
``mcp_servers`` remains in the callback signature for host compatibility.
|
|
6
|
+
"""
|
|
3
7
|
|
|
4
8
|
from __future__ import annotations
|
|
5
9
|
|
|
@@ -21,11 +25,12 @@ def skip_fallback_render(_agent) -> bool:
|
|
|
21
25
|
|
|
22
26
|
@asynccontextmanager
|
|
23
27
|
async def dbos_run_context(agent, pydantic_agent, group_id, mcp_servers):
|
|
24
|
-
"""Wrap a run() call with SetWorkflowID
|
|
28
|
+
"""Wrap a run() call with SetWorkflowID.
|
|
25
29
|
|
|
26
30
|
For sub-agent invocations (group_id starting with 'invoke_agent'), append
|
|
27
31
|
an atomic counter to ensure DBOS workflow ID uniqueness across rapid
|
|
28
|
-
back-to-back calls. For the main agent, use group_id as-is.
|
|
32
|
+
back-to-back calls. For the main agent, use group_id as-is. MCP toolsets
|
|
33
|
+
stay constructor-owned by pydantic-ai's DBOSAgent integration.
|
|
29
34
|
"""
|
|
30
35
|
from .lifecycle import is_launched
|
|
31
36
|
|
|
@@ -47,19 +52,9 @@ async def dbos_run_context(agent, pydantic_agent, group_id, mcp_servers):
|
|
|
47
52
|
else group_id
|
|
48
53
|
)
|
|
49
54
|
|
|
50
|
-
#
|
|
51
|
-
#
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
if mcp_servers:
|
|
57
|
-
original = getattr(inner, "_toolsets", []) or []
|
|
58
|
-
inner._toolsets = list(original) + list(mcp_servers)
|
|
59
|
-
swapped = True
|
|
60
|
-
try:
|
|
61
|
-
with SetWorkflowID(workflow_id):
|
|
62
|
-
yield workflow_id
|
|
63
|
-
finally:
|
|
64
|
-
if swapped:
|
|
65
|
-
inner._toolsets = original
|
|
55
|
+
# ``mcp_servers`` is intentionally unused: DBOSAgent received the
|
|
56
|
+
# constructor-level toolsets and converted them before this context runs.
|
|
57
|
+
# Retain the argument because the core callback ABI supplies it.
|
|
58
|
+
del agent, pydantic_agent, mcp_servers
|
|
59
|
+
with SetWorkflowID(workflow_id):
|
|
60
|
+
yield workflow_id
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
"""DBOSAgent wrapper, registered via the wrap_pydantic_agent hook.
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
pydantic-ai 2.31.0's ``DBOSAgent`` constructor visits the wrapped agent's
|
|
4
|
+
public toolsets and replaces MCP toolsets with DBOS-safe variants. Keep the
|
|
5
|
+
normal constructor-level toolsets intact and let that public integration own
|
|
6
|
+
the lifecycle; older plugin code mutated private ``_toolsets`` fields here.
|
|
6
7
|
"""
|
|
7
8
|
|
|
8
9
|
from __future__ import annotations
|
|
@@ -43,10 +44,9 @@ def wrap_with_dbos_agent(
|
|
|
43
44
|
except ImportError:
|
|
44
45
|
return None
|
|
45
46
|
|
|
46
|
-
#
|
|
47
|
-
#
|
|
48
|
-
|
|
49
|
-
|
|
47
|
+
# DBOSAgent 2.31.0 handles MCP toolsets during construction. Do not
|
|
48
|
+
# mutate private agent state: constructor-level toolsets are the public
|
|
49
|
+
# integration point and are converted to DBOS-safe variants there.
|
|
50
50
|
name_suffix = next(_reload_count)
|
|
51
51
|
agent_name = getattr(agent, "name", "agent")
|
|
52
52
|
# Sub-agent path historically didn't pass an event stream handler.
|