code-puppy-core-plugins 0.0.17__tar.gz → 0.0.20__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.17 → code_puppy_core_plugins-0.0.20}/PKG-INFO +2 -1
- code_puppy_core_plugins-0.0.20/code_puppy_core_plugins/session_namer/__init__.py +1 -0
- code_puppy_core_plugins-0.0.20/code_puppy_core_plugins/session_namer/namer.py +255 -0
- code_puppy_core_plugins-0.0.20/code_puppy_core_plugins/session_namer/register_callbacks.py +86 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/pyproject.toml +3 -1
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/.gitignore +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/LICENSE +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/README.md +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/acp/README.md +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/acp/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/acp/agent.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/acp/bridge.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/acp/capabilities.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/acp/commands.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/acp/content.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/acp/io_delegation.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/acp/mcp_config.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/acp/permissions.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/acp/persistence.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/acp/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/acp/replay.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/acp/session.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/acp/session_config.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/acp/state.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/agent_creator_skill/SKILL.md +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/agent_creator_skill/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/agent_creator_skill/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/agent_skills/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/agent_skills/config.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/agent_skills/discovery.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/agent_skills/downloader.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/agent_skills/enabled_skills.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/agent_skills/installer.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/agent_skills/metadata.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/agent_skills/prompt_builder.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/agent_skills/provider.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/agent_skills/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/agent_skills/remote_catalog.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/agent_skills/skill_catalog.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/agent_skills/skill_commands.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/agent_skills/skills_install_menu.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/agent_skills/skills_menu.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/aws_bedrock/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/aws_bedrock/config.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/aws_bedrock/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/aws_bedrock/utils.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/azure_foundry/README.md +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/azure_foundry/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/azure_foundry/config.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/azure_foundry/discovery.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/azure_foundry/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/azure_foundry/token.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/azure_foundry/utils.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/btw/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/btw/inline_view.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/btw/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/btw/side_query.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/chatgpt_oauth/IMAGEGEN_SKILL.md +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/chatgpt_oauth/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/chatgpt_oauth/config.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/chatgpt_oauth/image_generation.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/chatgpt_oauth/image_tool.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/chatgpt_oauth/model_catalog.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/chatgpt_oauth/oauth_flow.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/chatgpt_oauth/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/chatgpt_oauth/test_plugin.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/chatgpt_oauth/usage.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/chatgpt_oauth/utils.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/claude_code_hooks/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/claude_code_hooks/config.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/claude_code_hooks/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/claude_code_hooks/trust.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/claude_code_oauth/README.md +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/claude_code_oauth/SETUP.md +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/claude_code_oauth/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/claude_code_oauth/config.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/claude_code_oauth/fast_mode.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/claude_code_oauth/prompt_handler.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/claude_code_oauth/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/claude_code_oauth/test_plugin.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/claude_code_oauth/token_refresh_heartbeat.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/claude_code_oauth/utils.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/code_puppy_agent/AGENTS_AND_TOOLS.md +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/code_puppy_agent/MODELS_AND_MCP.md +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/code_puppy_agent/PLUGINS_AND_CALLBACKS.md +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/code_puppy_agent/SESSIONS_AND_HISTORY.md +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/code_puppy_agent/SKILL.md +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/code_puppy_agent/SKILLS_SYSTEM.md +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/code_puppy_agent/SYSTEM_PROMPT_CONFIG_AND_I18N.md +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/code_puppy_agent/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/code_puppy_agent/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/computer_use/NativeCapture.swift +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/computer_use/README.md +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/computer_use/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/computer_use/accessibility.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/computer_use/activation.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/computer_use/backend.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/computer_use/backend_types.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/computer_use/capture.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/computer_use/commands.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/computer_use/geometry.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/computer_use/inline_image.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/computer_use/keycodes.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/computer_use/policy.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/computer_use/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/computer_use/safety.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/computer_use/settle.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/computer_use/state.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/computer_use/tools.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/context_indicator/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/context_indicator/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/context_indicator/usage.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/copilot_auth/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/copilot_auth/config.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/copilot_auth/reasoning_client.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/copilot_auth/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/copilot_auth/utils.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/customizable_commands/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/customizable_commands/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/dbos_durable_exec/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/dbos_durable_exec/cancel.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/dbos_durable_exec/commands.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/dbos_durable_exec/config.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/dbos_durable_exec/lifecycle.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/dbos_durable_exec/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/dbos_durable_exec/runtime.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/dbos_durable_exec/startup_lock.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/dbos_durable_exec/workflow_ids.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/dbos_durable_exec/wrapper.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/destructive_command_guard/AGENTS.md +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/destructive_command_guard/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/destructive_command_guard/detector.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/destructive_command_guard/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/emoji_filter/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/emoji_filter/config.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/emoji_filter/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/emoji_filter/stripper.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/empty_html_comment_filter/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/example_custom_command/README.md +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/example_custom_command/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/file_permission_handler/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/file_permission_handler/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/flux_bootstrap/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/_docs/README.md +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/_docs/cheatsheet.md +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/_docs/pipeline.md +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/_docs/synopsis.md +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/about.md +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/address-feedback.md +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/ask.md +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/aug.md +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/auto-pilot.md +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/cheatsheet.md +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/commit.md +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/config.md +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/create-pr.md +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/exec.md +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/new.md +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/qa.md +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/rebase.md +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/review.md +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/split.md +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/squash-commits.md +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/status.md +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/tests.md +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/flux_bootstrap/bundled/scripts/flux_about.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/flux_bootstrap/bundled/scripts/flux_cheatsheet.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/flux_bootstrap/bundled/scripts/flux_status.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/flux_bootstrap/installer.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/flux_bootstrap/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/force_push_guard/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/force_push_guard/detector.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/force_push_guard/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/fork/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/fork/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/frontend_emitter/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/frontend_emitter/emitter.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/frontend_emitter/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/frontend_emitter/session_context.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/grok_oauth/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/grok_oauth/config.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/grok_oauth/oauth_flow.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/grok_oauth/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/grok_oauth/utils.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/herdr/README.md +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/herdr/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/herdr/client.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/herdr/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/herdr/reporter.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/herdr/smoke.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/herdr/sources.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/hook_creator/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/hook_creator/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/hook_manager/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/hook_manager/config.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/hook_manager/hooks_menu.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/hook_manager/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/hook_manager/trust_handler.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/logfire_oauth/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/logfire_oauth/oauth.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/logfire_oauth/query_tool.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/logfire_oauth/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/logfire_sessions/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/logfire_sessions/mirror.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/logfire_sessions/query.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/logfire_sessions/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/logfire_sessions/sync.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/meta_oauth/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/meta_oauth/config.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/meta_oauth/oauth_flow.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/meta_oauth/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/meta_oauth/utils.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/namespace_skill_search/README.md +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/namespace_skill_search/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/namespace_skill_search/namespaces.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/namespace_skill_search/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/namespace_skill_search/search_tool.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/no_tools/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/no_tools/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/oauth_pasteback.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/oauth_puppy_html.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/obsidian_agent/README.md +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/obsidian_agent/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/obsidian_agent/agent_obsidian.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/obsidian_agent/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/ollama/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/ollama/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/ollama_setup/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/ollama_setup/completer.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/ollama_setup/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/plugin_list/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/plugin_list/plugin_contributions.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/plugin_list/plugin_meta.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/plugin_list/plugin_text_utils.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/plugin_list/plugins_menu.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/plugin_list/plugins_menu_layout.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/plugin_list/plugins_menu_render.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/plugin_list/project_trust_flow.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/plugin_list/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/pop_command/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/pop_command/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/prompt_newline/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/prompt_newline/config.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/prompt_newline/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/prune/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/prune/prune_menu.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/prune/prune_model.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/prune/prune_render.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/prune/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/puppy_kennel/README.md +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/puppy_kennel/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/puppy_kennel/commands.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/puppy_kennel/config.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/puppy_kennel/kennel.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/puppy_kennel/packer.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/puppy_kennel/recorder.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/puppy_kennel/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/puppy_kennel/retriever.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/puppy_kennel/schema.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/puppy_kennel/state.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/puppy_kennel/tools.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/puppy_kennel/wings.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/puppy_spinner/README.md +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/puppy_spinner/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/puppy_spinner/builtin_frames.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/puppy_spinner/commands.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/puppy_spinner/picker.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/puppy_spinner/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/puppy_spinner/spinners.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/qa_kitten_skill/SKILL.md +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/qa_kitten_skill/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/qa_kitten_skill/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/quick_resume/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/quick_resume/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/review_pr/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/review_pr/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/shell_safety/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/shell_safety/agent_shell_safety.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/shell_safety/command_cache.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/shell_safety/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/spill/LICENSE.deepseek +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/spill/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/spill/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/spill/store.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/stack_dump/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/stack_dump/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/statusline/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/statusline/config.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/statusline/payload.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/statusline/prompt_patch.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/statusline/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/statusline/runner.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/statusline/statusline_command.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/steer_queue/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/steer_queue/queue_menu.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/steer_queue/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/subagent_panel/README.md +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/subagent_panel/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/subagent_panel/coalesce_patch.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/subagent_panel/panel_render.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/subagent_panel/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/subagent_panel/resume_repaint.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/subagent_panel/state.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/switch_agent_resume/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/switch_agent_resume/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/theme/README.md +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/theme/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/theme/bundled_palettes.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/theme/content_styles.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/theme/osc_palette.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/theme/picker.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/theme/prompt_toolkit_theme.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/theme/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/theme/rich_themes.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/theme/themes.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/timestamp_heartbeat/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/timestamp_heartbeat/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/token_ratio_learner/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/token_ratio_learner/ratios.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/token_ratio_learner/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/universal_constructor/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/universal_constructor/models.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/universal_constructor/provider.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/universal_constructor/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/universal_constructor/registry.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/universal_constructor/sandbox.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/web_retriever_skill/SKILL.md +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/web_retriever_skill/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/web_retriever_skill/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/wide_completion_menu/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/wide_completion_menu/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/wiggum/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/wiggum/goal_runs.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/wiggum/judge.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/wiggum/judge_config.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/wiggum/judges_menu.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/wiggum/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/wiggum/state.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/code_puppy_core_plugins/yolo_cli/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.17 → code_puppy_core_plugins-0.0.20}/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.20
|
|
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: prompt-toolkit<4,>=3.0.0
|
|
18
19
|
Requires-Dist: pydantic-ai-slim[anthropic,mcp,openai]<3,>=2.31.0
|
|
19
20
|
Description-Content-Type: text/markdown
|
|
20
21
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""AI session naming: titles, subtitles, and tags for /resume."""
|
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
"""One-shot model calls that name autosave sessions for the /resume browser.
|
|
2
|
+
|
|
3
|
+
Writes ``title`` / ``subtitle`` / ``tags`` into the session's metadata
|
|
4
|
+
sidecar -- the exact keys the two-pane session browser already reads --
|
|
5
|
+
plus ``ai_named_at`` (the message count at naming time) so re-naming is
|
|
6
|
+
**incremental**: the previous summary and only the messages since the
|
|
7
|
+
last naming are fed back to the model, letting the title evolve
|
|
8
|
+
gracefully instead of being regenerated from scratch.
|
|
9
|
+
|
|
10
|
+
Follows the ``btw`` side-query pattern: a throwaway history-free
|
|
11
|
+
pydantic_ai Agent on a worker thread with its own event loop. All work
|
|
12
|
+
funnels through a single-worker executor so a burst of autosaves can
|
|
13
|
+
never stampede the model.
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
from __future__ import annotations
|
|
17
|
+
|
|
18
|
+
import asyncio
|
|
19
|
+
import concurrent.futures
|
|
20
|
+
import json
|
|
21
|
+
import logging
|
|
22
|
+
import re
|
|
23
|
+
import threading
|
|
24
|
+
from pathlib import Path
|
|
25
|
+
from typing import Optional
|
|
26
|
+
|
|
27
|
+
logger = logging.getLogger(__name__)
|
|
28
|
+
|
|
29
|
+
QUERY_TIMEOUT_S = 60.0
|
|
30
|
+
# Re-name after this many new messages accumulate since the last naming.
|
|
31
|
+
RENAME_DELTA = 16
|
|
32
|
+
# Max sessions to backfill per browser open (cost control).
|
|
33
|
+
BACKFILL_LIMIT = 10
|
|
34
|
+
_DIGEST_CHAR_BUDGET = 2400
|
|
35
|
+
_SNIPPET_CHARS = 240
|
|
36
|
+
_MAX_TAGS = 4
|
|
37
|
+
|
|
38
|
+
_INSTRUCTIONS = (
|
|
39
|
+
"You name coding-agent chat sessions for a resume picker. Given a "
|
|
40
|
+
"digest of the conversation (and possibly the previous summary), "
|
|
41
|
+
"reply with ONLY a JSON object: "
|
|
42
|
+
'{"title": <=8 words naming the main task, '
|
|
43
|
+
'"subtitle": <=12 words of concrete detail, '
|
|
44
|
+
'"tags": up to 4 lowercase single-word topic tags}. '
|
|
45
|
+
"When a previous summary is provided, refine it: keep the title "
|
|
46
|
+
"stable unless the session's focus materially changed. "
|
|
47
|
+
"No prose, no code fences -- just the JSON object."
|
|
48
|
+
)
|
|
49
|
+
|
|
50
|
+
_executor = concurrent.futures.ThreadPoolExecutor(
|
|
51
|
+
max_workers=1, thread_name_prefix="session-namer"
|
|
52
|
+
)
|
|
53
|
+
_inflight: set[str] = set()
|
|
54
|
+
_inflight_lock = threading.Lock()
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def naming_needed(meta: dict) -> bool:
|
|
58
|
+
"""True when a session has never been AI-named or grew enough since."""
|
|
59
|
+
named_at = meta.get("ai_named_at")
|
|
60
|
+
if not isinstance(named_at, int):
|
|
61
|
+
return True
|
|
62
|
+
try:
|
|
63
|
+
count = int(meta.get("message_count", 0))
|
|
64
|
+
except (TypeError, ValueError):
|
|
65
|
+
return False
|
|
66
|
+
return count - named_at >= RENAME_DELTA
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
def build_digest(history: list, since: int = 0) -> str:
|
|
70
|
+
"""Compact plain-text digest of user/assistant turns from ``since``."""
|
|
71
|
+
lines: list[str] = []
|
|
72
|
+
used = 0
|
|
73
|
+
for msg in history[since:]:
|
|
74
|
+
for part in getattr(msg, "parts", ()) or ():
|
|
75
|
+
kind = getattr(part, "part_kind", "")
|
|
76
|
+
if kind not in ("user-prompt", "text"):
|
|
77
|
+
continue
|
|
78
|
+
content = getattr(part, "content", None)
|
|
79
|
+
if not isinstance(content, str) or not content.strip():
|
|
80
|
+
continue
|
|
81
|
+
role = "user" if kind == "user-prompt" else "assistant"
|
|
82
|
+
snippet = content.strip()[:_SNIPPET_CHARS]
|
|
83
|
+
line = f"{role}: {snippet}"
|
|
84
|
+
if used + len(line) > _DIGEST_CHAR_BUDGET:
|
|
85
|
+
return "\n".join(lines)
|
|
86
|
+
lines.append(line)
|
|
87
|
+
used += len(line)
|
|
88
|
+
return "\n".join(lines)
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
def build_prompt(digest: str, previous: Optional[dict]) -> str:
|
|
92
|
+
if previous:
|
|
93
|
+
prior = {
|
|
94
|
+
"title": previous.get("title", ""),
|
|
95
|
+
"subtitle": previous.get("subtitle", ""),
|
|
96
|
+
"tags": previous.get("tags", []),
|
|
97
|
+
}
|
|
98
|
+
return (
|
|
99
|
+
f"Previous summary:\n{json.dumps(prior)}\n\n"
|
|
100
|
+
f"Conversation since then:\n{digest}"
|
|
101
|
+
)
|
|
102
|
+
return f"Conversation digest:\n{digest}"
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
def parse_naming(raw: str) -> Optional[dict]:
|
|
106
|
+
"""Tolerantly extract ``{title, subtitle, tags}`` from model output."""
|
|
107
|
+
match = re.search(r"\{.*\}", raw, re.DOTALL)
|
|
108
|
+
if not match:
|
|
109
|
+
return None
|
|
110
|
+
try:
|
|
111
|
+
data = json.loads(match.group(0))
|
|
112
|
+
except (ValueError, TypeError):
|
|
113
|
+
return None
|
|
114
|
+
if not isinstance(data, dict):
|
|
115
|
+
return None
|
|
116
|
+
title = data.get("title")
|
|
117
|
+
if not isinstance(title, str) or not title.strip():
|
|
118
|
+
return None
|
|
119
|
+
subtitle = data.get("subtitle")
|
|
120
|
+
tags = data.get("tags")
|
|
121
|
+
clean_tags = []
|
|
122
|
+
if isinstance(tags, list):
|
|
123
|
+
for tag in tags:
|
|
124
|
+
if len(clean_tags) >= _MAX_TAGS:
|
|
125
|
+
break
|
|
126
|
+
if isinstance(tag, str) and tag.strip():
|
|
127
|
+
clean_tags.append(tag.strip().lstrip("#").lower())
|
|
128
|
+
return {
|
|
129
|
+
"title": title.strip(),
|
|
130
|
+
"subtitle": subtitle.strip() if isinstance(subtitle, str) else "",
|
|
131
|
+
"tags": clean_tags,
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
async def _ask(model_name: str, prompt: str) -> str:
|
|
136
|
+
"""Single-turn, history-free naming query. Raises on failure."""
|
|
137
|
+
from pydantic_ai import Agent, UsageLimits
|
|
138
|
+
|
|
139
|
+
from code_puppy.model_factory import ModelFactory, make_model_settings
|
|
140
|
+
from code_puppy.model_utils import prepare_prompt_for_model
|
|
141
|
+
|
|
142
|
+
models_config = ModelFactory.load_config()
|
|
143
|
+
if model_name not in models_config:
|
|
144
|
+
raise ValueError(f"model {model_name!r} not present in the model config")
|
|
145
|
+
|
|
146
|
+
model = ModelFactory.get_model(model_name, models_config)
|
|
147
|
+
prepared = prepare_prompt_for_model(
|
|
148
|
+
model_name,
|
|
149
|
+
_INSTRUCTIONS,
|
|
150
|
+
prompt,
|
|
151
|
+
prepend_system_to_user=True,
|
|
152
|
+
)
|
|
153
|
+
agent = Agent(
|
|
154
|
+
model=model,
|
|
155
|
+
instructions=prepared.instructions,
|
|
156
|
+
retries=1,
|
|
157
|
+
model_settings=make_model_settings(model_name),
|
|
158
|
+
)
|
|
159
|
+
result = await agent.run(
|
|
160
|
+
prepared.user_prompt,
|
|
161
|
+
usage_limits=UsageLimits(request_limit=2),
|
|
162
|
+
)
|
|
163
|
+
return str(result.output)
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
def resolve_model_name() -> Optional[str]:
|
|
167
|
+
"""Configured override first, else the ``btw`` current-model logic."""
|
|
168
|
+
try:
|
|
169
|
+
from code_puppy.config import get_value
|
|
170
|
+
|
|
171
|
+
override = str(get_value("session_namer_model") or "").strip()
|
|
172
|
+
if override:
|
|
173
|
+
return override
|
|
174
|
+
except Exception:
|
|
175
|
+
pass
|
|
176
|
+
from ..btw.side_query import resolve_model_name as btw_resolve
|
|
177
|
+
|
|
178
|
+
return btw_resolve()
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
def name_session(
|
|
182
|
+
base_dir: Path, session_name: str, live_meta: Optional[dict] = None
|
|
183
|
+
) -> bool:
|
|
184
|
+
"""Name (or incrementally re-name) one session. Returns True on write.
|
|
185
|
+
|
|
186
|
+
Runs on the namer worker thread. ``live_meta`` is the browser's
|
|
187
|
+
in-memory metadata dict; updating it in place surfaces the new
|
|
188
|
+
title/tags on the next repaint without a disk re-read.
|
|
189
|
+
"""
|
|
190
|
+
try:
|
|
191
|
+
from code_puppy.command_line.session_browser_data import (
|
|
192
|
+
_get_session_metadata,
|
|
193
|
+
merge_sidecar,
|
|
194
|
+
)
|
|
195
|
+
from code_puppy.session_storage import load_session
|
|
196
|
+
|
|
197
|
+
meta = _get_session_metadata(base_dir, session_name)
|
|
198
|
+
if not naming_needed(meta):
|
|
199
|
+
return False
|
|
200
|
+
history = load_session(session_name, base_dir)
|
|
201
|
+
named_at = meta.get("ai_named_at")
|
|
202
|
+
since = named_at if isinstance(named_at, int) else 0
|
|
203
|
+
previous = meta if isinstance(named_at, int) else None
|
|
204
|
+
digest = build_digest(history, since)
|
|
205
|
+
if not digest.strip():
|
|
206
|
+
# Nothing nameable yet; snooze until the session grows.
|
|
207
|
+
merge_sidecar(base_dir, session_name, {"ai_named_at": len(history)})
|
|
208
|
+
return False
|
|
209
|
+
|
|
210
|
+
model_name = resolve_model_name()
|
|
211
|
+
if not model_name:
|
|
212
|
+
return False
|
|
213
|
+
raw = asyncio.run(
|
|
214
|
+
asyncio.wait_for(
|
|
215
|
+
_ask(model_name, build_prompt(digest, previous)),
|
|
216
|
+
timeout=QUERY_TIMEOUT_S,
|
|
217
|
+
)
|
|
218
|
+
)
|
|
219
|
+
naming = parse_naming(raw)
|
|
220
|
+
if naming is None:
|
|
221
|
+
logger.debug("session_namer: unparseable output for %s", session_name)
|
|
222
|
+
return False
|
|
223
|
+
|
|
224
|
+
updates = {**naming, "ai_named_at": len(history)}
|
|
225
|
+
if not merge_sidecar(base_dir, session_name, updates):
|
|
226
|
+
return False
|
|
227
|
+
if live_meta is not None:
|
|
228
|
+
live_meta.update(updates)
|
|
229
|
+
return True
|
|
230
|
+
except Exception:
|
|
231
|
+
logger.debug("session_namer: naming %s failed", session_name, exc_info=True)
|
|
232
|
+
return False
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
def submit(base_dir: Path, session_name: str, live_meta: Optional[dict] = None) -> bool:
|
|
236
|
+
"""Queue a naming job unless one is already in flight for the session."""
|
|
237
|
+
with _inflight_lock:
|
|
238
|
+
if session_name in _inflight:
|
|
239
|
+
return False
|
|
240
|
+
_inflight.add(session_name)
|
|
241
|
+
|
|
242
|
+
def job() -> None:
|
|
243
|
+
try:
|
|
244
|
+
name_session(base_dir, session_name, live_meta)
|
|
245
|
+
finally:
|
|
246
|
+
with _inflight_lock:
|
|
247
|
+
_inflight.discard(session_name)
|
|
248
|
+
|
|
249
|
+
try:
|
|
250
|
+
_executor.submit(job)
|
|
251
|
+
return True
|
|
252
|
+
except Exception: # pragma: no cover - interpreter shutdown
|
|
253
|
+
with _inflight_lock:
|
|
254
|
+
_inflight.discard(session_name)
|
|
255
|
+
return False
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"""Register the session-namer plugin.
|
|
2
|
+
|
|
3
|
+
Two triggers, both decorative (failures never surface):
|
|
4
|
+
|
|
5
|
+
* ``post_autosave`` -- name the just-saved session when it has never
|
|
6
|
+
been AI-named or has grown by ``RENAME_DELTA`` messages since. The
|
|
7
|
+
previous summary is fed back in, so titles refine instead of thrash.
|
|
8
|
+
* ``session_browser_open`` -- when ``/resume`` opens, backfill up to
|
|
9
|
+
``BACKFILL_LIMIT`` of the newest un-named sessions. The browser hands
|
|
10
|
+
over its live metadata dicts, so names pop in on repaint as the
|
|
11
|
+
worker finishes them.
|
|
12
|
+
|
|
13
|
+
Enabled by default; ``/set session_namer off`` disables, and
|
|
14
|
+
``session_namer_model`` overrides the model (defaults to the current
|
|
15
|
+
agent/global model via the ``btw`` resolution chain).
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
from __future__ import annotations
|
|
19
|
+
|
|
20
|
+
import logging
|
|
21
|
+
from pathlib import Path
|
|
22
|
+
from typing import Any
|
|
23
|
+
|
|
24
|
+
from code_puppy.callbacks import register_callback
|
|
25
|
+
|
|
26
|
+
logger = logging.getLogger(__name__)
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def _enabled() -> bool:
|
|
30
|
+
try:
|
|
31
|
+
from code_puppy.config import get_value
|
|
32
|
+
|
|
33
|
+
raw = get_value("session_namer")
|
|
34
|
+
if raw is None or str(raw).strip() == "":
|
|
35
|
+
return True # on by default -- the naming IS the feature
|
|
36
|
+
return str(raw).strip().lower() not in {"0", "false", "no", "off"}
|
|
37
|
+
except Exception:
|
|
38
|
+
return False
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def _on_post_autosave(metadata: Any) -> None:
|
|
42
|
+
"""Queue naming for a freshly autosaved session. Never raises."""
|
|
43
|
+
try:
|
|
44
|
+
if not _enabled():
|
|
45
|
+
return
|
|
46
|
+
from code_puppy.command_line.session_browser_data import (
|
|
47
|
+
_get_session_metadata,
|
|
48
|
+
)
|
|
49
|
+
|
|
50
|
+
from .namer import naming_needed, submit
|
|
51
|
+
|
|
52
|
+
# Sidecar is the source of truth for ai_named_at; re-read it.
|
|
53
|
+
base_dir = Path(metadata.json_path).parent
|
|
54
|
+
meta = _get_session_metadata(base_dir, metadata.session_name)
|
|
55
|
+
meta.setdefault("message_count", metadata.message_count)
|
|
56
|
+
if naming_needed(meta):
|
|
57
|
+
submit(base_dir, metadata.session_name)
|
|
58
|
+
except Exception:
|
|
59
|
+
logger.debug("session_namer: post_autosave hook failed", exc_info=True)
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
def _on_session_browser_open(base_dir: str, entries: list) -> None:
|
|
63
|
+
"""Backfill names for the newest un-named sessions. Never raises."""
|
|
64
|
+
try:
|
|
65
|
+
if not _enabled():
|
|
66
|
+
return
|
|
67
|
+
from .namer import BACKFILL_LIMIT, naming_needed, submit
|
|
68
|
+
|
|
69
|
+
queued = 0
|
|
70
|
+
directory = Path(base_dir)
|
|
71
|
+
for session_name, meta in entries:
|
|
72
|
+
if queued >= BACKFILL_LIMIT:
|
|
73
|
+
break
|
|
74
|
+
if isinstance(meta, dict) and naming_needed(meta):
|
|
75
|
+
if submit(directory, session_name, live_meta=meta):
|
|
76
|
+
queued += 1
|
|
77
|
+
except Exception:
|
|
78
|
+
logger.debug("session_namer: browser_open hook failed", exc_info=True)
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
register_callback("post_autosave", _on_post_autosave)
|
|
82
|
+
try:
|
|
83
|
+
register_callback("session_browser_open", _on_session_browser_open)
|
|
84
|
+
except ValueError:
|
|
85
|
+
# Core predates the session_browser_open hook; autosave naming still works.
|
|
86
|
+
logger.debug("session_namer: core lacks session_browser_open hook")
|
|
@@ -4,12 +4,13 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "code-puppy-core-plugins"
|
|
7
|
-
version = "0.0.
|
|
7
|
+
version = "0.0.20"
|
|
8
8
|
description = "Official plugin bundle for Code Puppy"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.11,<3.15"
|
|
11
11
|
dependencies = [
|
|
12
12
|
"httpx>=0.24.1,<1",
|
|
13
|
+
"prompt-toolkit>=3.0.0,<4",
|
|
13
14
|
"pydantic-ai-slim[openai,anthropic,mcp]>=2.31.0,<3",
|
|
14
15
|
]
|
|
15
16
|
license = {text = "MIT"}
|
|
@@ -73,6 +74,7 @@ puppy_spinner = "code_puppy_core_plugins.puppy_spinner.register_callbacks"
|
|
|
73
74
|
qa_kitten_skill = "code_puppy_core_plugins.qa_kitten_skill.register_callbacks"
|
|
74
75
|
quick_resume = "code_puppy_core_plugins.quick_resume.register_callbacks"
|
|
75
76
|
review_pr = "code_puppy_core_plugins.review_pr.register_callbacks"
|
|
77
|
+
session_namer = "code_puppy_core_plugins.session_namer.register_callbacks"
|
|
76
78
|
shell_safety = "code_puppy_core_plugins.shell_safety.register_callbacks"
|
|
77
79
|
spill = "code_puppy_core_plugins.spill.register_callbacks"
|
|
78
80
|
stack_dump = "code_puppy_core_plugins.stack_dump.register_callbacks"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|