code-puppy-core-plugins 0.0.5__tar.gz → 0.0.6__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.5 → code_puppy_core_plugins-0.0.6}/PKG-INFO +1 -1
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/code_puppy_agent/PLUGINS_AND_CALLBACKS.md +15 -1
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/code_puppy_agent/SKILL.md +2 -2
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/code_puppy_agent/SYSTEM_PROMPT_CONFIG_AND_I18N.md +17 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/spill/register_callbacks.py +27 -6
- code_puppy_core_plugins-0.0.6/code_puppy_core_plugins/spill/store.py +173 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/pyproject.toml +1 -1
- code_puppy_core_plugins-0.0.5/code_puppy_core_plugins/spill/store.py +0 -97
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/.gitignore +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/LICENSE +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/README.md +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/acp/README.md +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/acp/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/acp/agent.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/acp/bridge.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/acp/capabilities.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/acp/commands.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/acp/content.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/acp/io_delegation.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/acp/mcp_config.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/acp/permissions.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/acp/persistence.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/acp/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/acp/replay.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/acp/session.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/acp/session_config.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/acp/state.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/agent_skills/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/agent_skills/config.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/agent_skills/discovery.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/agent_skills/downloader.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/agent_skills/enabled_skills.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/agent_skills/installer.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/agent_skills/metadata.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/agent_skills/prompt_builder.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/agent_skills/provider.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/agent_skills/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/agent_skills/remote_catalog.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/agent_skills/skill_catalog.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/agent_skills/skill_commands.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/agent_skills/skills_install_menu.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/agent_skills/skills_menu.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/aws_bedrock/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/aws_bedrock/config.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/aws_bedrock/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/aws_bedrock/utils.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/azure_foundry/README.md +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/azure_foundry/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/azure_foundry/config.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/azure_foundry/discovery.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/azure_foundry/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/azure_foundry/token.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/azure_foundry/utils.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/btw/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/btw/inline_view.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/btw/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/btw/side_query.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/chatgpt_oauth/IMAGEGEN_SKILL.md +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/chatgpt_oauth/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/chatgpt_oauth/config.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/chatgpt_oauth/image_generation.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/chatgpt_oauth/image_tool.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/chatgpt_oauth/oauth_flow.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/chatgpt_oauth/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/chatgpt_oauth/test_plugin.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/chatgpt_oauth/usage.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/chatgpt_oauth/utils.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/claude_code_hooks/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/claude_code_hooks/config.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/claude_code_hooks/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/claude_code_oauth/README.md +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/claude_code_oauth/SETUP.md +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/claude_code_oauth/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/claude_code_oauth/config.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/claude_code_oauth/fast_mode.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/claude_code_oauth/prompt_handler.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/claude_code_oauth/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/claude_code_oauth/test_plugin.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/claude_code_oauth/token_refresh_heartbeat.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/claude_code_oauth/utils.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/code_puppy_agent/AGENTS_AND_TOOLS.md +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/code_puppy_agent/MODELS_AND_MCP.md +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/code_puppy_agent/SESSIONS_AND_HISTORY.md +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/code_puppy_agent/SKILLS_SYSTEM.md +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/code_puppy_agent/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/code_puppy_agent/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/computer_use/NativeCapture.swift +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/computer_use/README.md +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/computer_use/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/computer_use/accessibility.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/computer_use/activation.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/computer_use/backend.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/computer_use/backend_types.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/computer_use/capture.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/computer_use/commands.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/computer_use/geometry.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/computer_use/inline_image.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/computer_use/keycodes.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/computer_use/policy.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/computer_use/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/computer_use/safety.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/computer_use/settle.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/computer_use/state.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/computer_use/tools.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/context_indicator/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/context_indicator/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/context_indicator/usage.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/copilot_auth/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/copilot_auth/config.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/copilot_auth/reasoning_client.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/copilot_auth/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/copilot_auth/utils.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/customizable_commands/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/customizable_commands/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/dbos_durable_exec/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/dbos_durable_exec/cancel.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/dbos_durable_exec/commands.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/dbos_durable_exec/config.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/dbos_durable_exec/lifecycle.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/dbos_durable_exec/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/dbos_durable_exec/runtime.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/dbos_durable_exec/startup_lock.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/dbos_durable_exec/workflow_ids.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/dbos_durable_exec/wrapper.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/destructive_command_guard/AGENTS.md +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/destructive_command_guard/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/destructive_command_guard/detector.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/destructive_command_guard/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/emoji_filter/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/emoji_filter/config.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/emoji_filter/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/emoji_filter/stripper.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/empty_html_comment_filter/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/example_custom_command/README.md +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/example_custom_command/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/file_permission_handler/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/file_permission_handler/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/flux_bootstrap/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/_docs/README.md +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/_docs/cheatsheet.md +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/_docs/pipeline.md +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/_docs/synopsis.md +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/about.md +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/address-feedback.md +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/ask.md +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/aug.md +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/auto-pilot.md +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/cheatsheet.md +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/commit.md +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/config.md +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/create-pr.md +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/exec.md +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/new.md +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/qa.md +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/rebase.md +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/review.md +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/split.md +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/squash-commits.md +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/status.md +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/tests.md +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/flux_bootstrap/bundled/scripts/flux_about.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/flux_bootstrap/bundled/scripts/flux_cheatsheet.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/flux_bootstrap/bundled/scripts/flux_status.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/flux_bootstrap/installer.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/flux_bootstrap/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/force_push_guard/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/force_push_guard/detector.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/force_push_guard/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/fork/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/fork/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/frontend_emitter/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/frontend_emitter/emitter.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/frontend_emitter/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/frontend_emitter/session_context.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/grok_oauth/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/grok_oauth/config.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/grok_oauth/oauth_flow.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/grok_oauth/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/grok_oauth/utils.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/herdr/README.md +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/herdr/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/herdr/client.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/herdr/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/herdr/reporter.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/herdr/smoke.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/herdr/sources.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/hook_creator/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/hook_creator/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/hook_manager/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/hook_manager/config.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/hook_manager/hooks_menu.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/hook_manager/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/meta_oauth/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/meta_oauth/config.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/meta_oauth/oauth_flow.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/meta_oauth/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/meta_oauth/utils.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/namespace_skill_search/README.md +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/namespace_skill_search/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/namespace_skill_search/namespaces.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/namespace_skill_search/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/namespace_skill_search/search_tool.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/no_tools/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/no_tools/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/oauth_pasteback.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/oauth_puppy_html.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/obsidian_agent/README.md +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/obsidian_agent/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/obsidian_agent/agent_obsidian.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/obsidian_agent/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/ollama/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/ollama/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/ollama_setup/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/ollama_setup/completer.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/ollama_setup/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/plugin_list/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/plugin_list/plugin_contributions.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/plugin_list/plugin_meta.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/plugin_list/plugin_text_utils.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/plugin_list/plugins_menu.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/plugin_list/plugins_menu_layout.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/plugin_list/plugins_menu_render.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/plugin_list/project_trust_flow.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/plugin_list/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/pop_command/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/pop_command/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/prompt_newline/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/prompt_newline/config.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/prompt_newline/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/prune/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/prune/prune_menu.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/prune/prune_model.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/prune/prune_render.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/prune/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/puppy_kennel/README.md +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/puppy_kennel/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/puppy_kennel/commands.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/puppy_kennel/config.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/puppy_kennel/kennel.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/puppy_kennel/packer.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/puppy_kennel/recorder.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/puppy_kennel/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/puppy_kennel/retriever.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/puppy_kennel/schema.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/puppy_kennel/state.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/puppy_kennel/tools.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/puppy_kennel/wings.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/puppy_spinner/README.md +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/puppy_spinner/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/puppy_spinner/builtin_frames.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/puppy_spinner/commands.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/puppy_spinner/picker.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/puppy_spinner/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/puppy_spinner/spinners.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/quick_resume/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/quick_resume/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/review_pr/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/review_pr/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/shell_safety/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/shell_safety/agent_shell_safety.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/shell_safety/command_cache.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/shell_safety/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/spill/LICENSE.deepseek +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/spill/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/stack_dump/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/stack_dump/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/statusline/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/statusline/config.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/statusline/payload.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/statusline/prompt_patch.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/statusline/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/statusline/runner.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/statusline/statusline_command.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/steer_queue/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/steer_queue/queue_menu.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/steer_queue/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/subagent_panel/README.md +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/subagent_panel/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/subagent_panel/coalesce_patch.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/subagent_panel/panel_render.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/subagent_panel/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/subagent_panel/resume_repaint.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/subagent_panel/state.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/switch_agent_resume/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/switch_agent_resume/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/theme/README.md +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/theme/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/theme/bundled_palettes.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/theme/content_styles.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/theme/osc_palette.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/theme/picker.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/theme/prompt_toolkit_theme.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/theme/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/theme/rich_themes.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/theme/themes.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/timestamp_heartbeat/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/timestamp_heartbeat/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/token_ratio_learner/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/token_ratio_learner/ratios.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/token_ratio_learner/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/universal_constructor/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/universal_constructor/models.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/universal_constructor/provider.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/universal_constructor/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/universal_constructor/registry.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/universal_constructor/sandbox.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/wide_completion_menu/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/wide_completion_menu/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/wiggum/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/wiggum/goal_runs.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/wiggum/judge.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/wiggum/judge_config.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/wiggum/judges_menu.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/wiggum/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/wiggum/state.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/yolo_cli/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/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.6
|
|
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
|
|
@@ -36,13 +36,27 @@ time. All hooks accept sync or async functions.
|
|
|
36
36
|
| `get_model_system_prompt` | Per-model prompt patch | `dict` with `instructions`/`handled` or `None` |
|
|
37
37
|
| `custom_command` | Unknown `/slash` command | `True` (handled), `str` (message), or `None` (not mine) |
|
|
38
38
|
| `pre_tool_call` | Before tool executes | Can modify args |
|
|
39
|
-
| `post_tool_call` | After tool finishes | Observes result + duration |
|
|
39
|
+
| `post_tool_call` | After tool finishes | Observes result + duration; can mutate dict results in place |
|
|
40
40
|
| `run_shell_command` | Before shell exec | Return `{"blocked": True}` to block |
|
|
41
41
|
| `file_permission` | Before file op | `bool` — allow/deny |
|
|
42
42
|
| `agent_run_start` / `agent_run_end` | Agent lifecycle | Observes name, model, session |
|
|
43
43
|
|
|
44
44
|
The full list is in `callbacks.py` — `PhaseType` has ~45 phases.
|
|
45
45
|
|
|
46
|
+
### Mutating results from `post_tool_call`
|
|
47
|
+
|
|
48
|
+
The patched tool runner evaluates the result reference before awaiting
|
|
49
|
+
`post_tool_call`. A callback can therefore mutate a plain dict result in
|
|
50
|
+
place and the model sees the change. It cannot replace a string or other
|
|
51
|
+
non-dict result by rebinding its local argument. Tool exceptions arrive
|
|
52
|
+
as error-only dicts and should remain intact.
|
|
53
|
+
|
|
54
|
+
Mutation is order-sensitive: result-bounding callbacks must run after
|
|
55
|
+
callbacks that append content. Sync callbacks also execute on the event
|
|
56
|
+
loop, so blocking work belongs in an async callback via
|
|
57
|
+
`asyncio.to_thread()`. The builtin `spill` plugin is the canonical
|
|
58
|
+
implementation.
|
|
59
|
+
|
|
46
60
|
## Minimal plugin example
|
|
47
61
|
|
|
48
62
|
```
|
|
@@ -89,11 +89,11 @@ Plugins hook into every stage via callbacks.
|
|
|
89
89
|
| File | Read this for |
|
|
90
90
|
|------|----------------|
|
|
91
91
|
| `AGENTS_AND_TOOLS.md` | How agents are structured/discovered (Python, JSON, plugin agents, precedence). How tools get registered and wired to an agent. Async-tool blocking-I/O gotcha. |
|
|
92
|
-
| `PLUGINS_AND_CALLBACKS.md` | Plugin discovery tiers, the
|
|
92
|
+
| `PLUGINS_AND_CALLBACKS.md` | Plugin discovery tiers, the callback hook table, in-place tool-result mutation and ordering, a minimal plugin example, and hook-system gotchas (`get_model_system_prompt` last-write-wins; don't do real work at import time). |
|
|
93
93
|
| `MODELS_AND_MCP.md` | ModelFactory, model config precedence, model types. MCP server lifecycle, agent bindings, and a known gap (MCP servers can't yet provide skills). |
|
|
94
94
|
| `SESSIONS_AND_HISTORY.md` | Message history, context-window compaction, session save/load commands. |
|
|
95
95
|
| `SKILLS_SYSTEM.md` | Skill discovery/activation, bundled-resource-file gotcha for plugin-registered skills, and **skill namespaces** — how `namespace_skill_search` groups large skill catalogs and replaces the flat prompt list. |
|
|
96
|
-
| `SYSTEM_PROMPT_CONFIG_AND_I18N.md` | Exact system-prompt assembly order
|
|
96
|
+
| `SYSTEM_PROMPT_CONFIG_AND_I18N.md` | Exact system-prompt assembly order, `puppy.cfg` + key directories, spill configuration, the messaging bus, and an i18n quick-reference (full guide: `docs/I18N.md`). |
|
|
97
97
|
|
|
98
98
|
Don't guess which file has what you need — the table above is exhaustive
|
|
99
99
|
for this skill's scope. If a question doesn't map cleanly to one row, it's
|
|
@@ -76,6 +76,23 @@ turning off `frontmatter_in_system_prompt` on its first run) does **not**
|
|
|
76
76
|
automatically revert. Disabling the plugin and undoing what it already
|
|
77
77
|
did to your config are two separate actions.
|
|
78
78
|
|
|
79
|
+
### Bounding oversized tool results with `spill`
|
|
80
|
+
|
|
81
|
+
The builtin `spill` plugin saves oversized top-level string fields to
|
|
82
|
+
private files and substitutes bounded head/tail previews with retrieval
|
|
83
|
+
guidance. It leaves error-only and non-dict results untouched and skips
|
|
84
|
+
`read_file` by default to avoid a read → spill → read loop.
|
|
85
|
+
|
|
86
|
+
| `puppy.cfg` key | Default | Meaning |
|
|
87
|
+
|-----------------|---------|---------|
|
|
88
|
+
| `spill_max_inline_bytes` | `32768` | Aggregate inline string-byte cap; `0` or negative disables spilling |
|
|
89
|
+
| `spill_preview_bytes` | `4096` | Head-plus-tail source-byte budget per spilled field |
|
|
90
|
+
| `spill_root` | unset | Storage root override; otherwise use a private OS temp directory |
|
|
91
|
+
| `spill_skip_tools` | `read_file` | Comma-separated tool names that must remain inline |
|
|
92
|
+
|
|
93
|
+
Storage is best-effort: any spill failure keeps the original successful
|
|
94
|
+
tool result inline.
|
|
95
|
+
|
|
79
96
|
---
|
|
80
97
|
|
|
81
98
|
## Messaging & UI
|
|
@@ -23,12 +23,13 @@ Config (puppy.cfg, also settable with ``/set``):
|
|
|
23
23
|
|
|
24
24
|
from __future__ import annotations
|
|
25
25
|
|
|
26
|
+
import asyncio
|
|
26
27
|
import logging
|
|
27
28
|
import math
|
|
28
29
|
from pathlib import Path
|
|
29
30
|
from typing import Any
|
|
30
31
|
|
|
31
|
-
from code_puppy.callbacks import register_callback
|
|
32
|
+
from code_puppy.callbacks import register_callback, unregister_callback
|
|
32
33
|
|
|
33
34
|
from . import store
|
|
34
35
|
|
|
@@ -129,7 +130,9 @@ def _build_replacement(
|
|
|
129
130
|
budget = max(0, budget - max(1, replacement_bytes - limit))
|
|
130
131
|
|
|
131
132
|
|
|
132
|
-
def _spill_result(
|
|
133
|
+
def _spill_result(
|
|
134
|
+
tool_name: str, result: dict[Any, Any], session_id: str | None = None
|
|
135
|
+
) -> None:
|
|
133
136
|
cap = _get_int(MAX_INLINE_KEY, DEFAULT_MAX_INLINE_BYTES)
|
|
134
137
|
if cap <= 0 or tool_name in _get_skip_tools():
|
|
135
138
|
return
|
|
@@ -158,7 +161,9 @@ def _spill_result(tool_name: str, result: dict[Any, Any]) -> None:
|
|
|
158
161
|
if total <= cap:
|
|
159
162
|
break
|
|
160
163
|
try:
|
|
161
|
-
path = store.save_text(
|
|
164
|
+
path = store.save_text(
|
|
165
|
+
original, tool_name, _get_root(), session_id=session_id
|
|
166
|
+
)
|
|
162
167
|
except Exception:
|
|
163
168
|
logger.warning(
|
|
164
169
|
"Failed to spill %s result field %r; keeping it inline",
|
|
@@ -192,25 +197,40 @@ def _spill_result(tool_name: str, result: dict[Any, Any]) -> None:
|
|
|
192
197
|
result.update(replacements)
|
|
193
198
|
|
|
194
199
|
|
|
195
|
-
def _on_post_tool_call(
|
|
200
|
+
async def _on_post_tool_call(
|
|
196
201
|
tool_name: str,
|
|
197
202
|
tool_args: dict,
|
|
198
203
|
result: Any,
|
|
199
204
|
duration_ms: float,
|
|
200
205
|
context: Any = None,
|
|
201
206
|
) -> None:
|
|
202
|
-
"""Spill oversized
|
|
207
|
+
"""Spill oversized string fields off the event loop without breaking calls."""
|
|
203
208
|
_ = tool_args, duration_ms, context
|
|
204
209
|
try:
|
|
205
210
|
if not isinstance(result, dict) or set(result) == {"error"}:
|
|
206
211
|
return
|
|
207
|
-
|
|
212
|
+
# Capture session attribution before entering the worker. The result
|
|
213
|
+
# reference remains valid and the callback dispatcher awaits us before
|
|
214
|
+
# the model serializes it.
|
|
215
|
+
session_id = store.current_session_id()
|
|
216
|
+
await asyncio.to_thread(_spill_result, tool_name, result, session_id)
|
|
208
217
|
except Exception:
|
|
209
218
|
logger.debug(
|
|
210
219
|
"spill plugin failed; keeping the tool result inline", exc_info=True
|
|
211
220
|
)
|
|
212
221
|
|
|
213
222
|
|
|
223
|
+
def _on_startup() -> None:
|
|
224
|
+
"""Move spill behind result-mutating plugins so the final result is capped."""
|
|
225
|
+
if unregister_callback("post_tool_call", _on_post_tool_call):
|
|
226
|
+
# unregister_callback intentionally preserves callback ownership, so
|
|
227
|
+
# disabled-plugin filtering still recognizes this as the spill hook.
|
|
228
|
+
register_callback("post_tool_call", _on_post_tool_call)
|
|
229
|
+
|
|
230
|
+
|
|
231
|
+
register_callback("startup", _on_startup)
|
|
232
|
+
|
|
233
|
+
|
|
214
234
|
def _reset_state() -> None:
|
|
215
235
|
"""Reset lazy process storage state for tests and defensive re-init."""
|
|
216
236
|
store._reset_state()
|
|
@@ -230,6 +250,7 @@ __all__ = [
|
|
|
230
250
|
"_build_replacement",
|
|
231
251
|
"_get_int",
|
|
232
252
|
"_on_post_tool_call",
|
|
253
|
+
"_on_startup",
|
|
233
254
|
"_reset_state",
|
|
234
255
|
"_spill_result",
|
|
235
256
|
]
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
"""Private local storage for spilled tool-result text."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import hashlib
|
|
6
|
+
import os
|
|
7
|
+
import re
|
|
8
|
+
import secrets
|
|
9
|
+
import stat
|
|
10
|
+
import tempfile
|
|
11
|
+
import threading
|
|
12
|
+
import uuid
|
|
13
|
+
from pathlib import Path
|
|
14
|
+
|
|
15
|
+
_default_root: Path | None = None
|
|
16
|
+
_process_session_id: str | None = None
|
|
17
|
+
_state_lock = threading.Lock()
|
|
18
|
+
_UNSAFE_NAME = re.compile(r"[^A-Za-z0-9._-]+")
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def private_root(configured_root: str | None = None) -> Path:
|
|
22
|
+
"""Return the configured root or a lazy private per-process temp root."""
|
|
23
|
+
global _default_root
|
|
24
|
+
if configured_root:
|
|
25
|
+
root = Path(configured_root).expanduser().resolve()
|
|
26
|
+
root.mkdir(mode=0o700, parents=True, exist_ok=True)
|
|
27
|
+
return root
|
|
28
|
+
with _state_lock:
|
|
29
|
+
if _default_root is None:
|
|
30
|
+
_default_root = Path(tempfile.mkdtemp(prefix="code-puppy-spill-"))
|
|
31
|
+
return _default_root
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def _process_fallback_session_id() -> str:
|
|
35
|
+
global _process_session_id
|
|
36
|
+
with _state_lock:
|
|
37
|
+
if _process_session_id is None:
|
|
38
|
+
_process_session_id = uuid.uuid4().hex
|
|
39
|
+
return _process_session_id
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def current_session_id() -> str:
|
|
43
|
+
"""Return an async-safe session scope, with a stable process fallback."""
|
|
44
|
+
try:
|
|
45
|
+
from code_puppy.tools.subagent_context import get_conversation_root_id
|
|
46
|
+
|
|
47
|
+
conversation_id = get_conversation_root_id()
|
|
48
|
+
if conversation_id:
|
|
49
|
+
return str(conversation_id)
|
|
50
|
+
except Exception:
|
|
51
|
+
pass
|
|
52
|
+
|
|
53
|
+
# MessageBus session state is process-global and can be overwritten by any
|
|
54
|
+
# concurrent agent task. If no async-safe conversation root is available,
|
|
55
|
+
# prefer the honest process fallback over confidently misattributing a spill.
|
|
56
|
+
return _process_fallback_session_id()
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
def _session_name(session_id: str) -> str:
|
|
60
|
+
digest = hashlib.sha256(session_id.encode("utf-8")).hexdigest()[:12]
|
|
61
|
+
return f"session-{digest}"
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
def session_dir(root: Path, session_id: str) -> Path:
|
|
65
|
+
"""Create a private real directory under ``root``, rejecting symlinks."""
|
|
66
|
+
directory = root / _session_name(session_id)
|
|
67
|
+
directory.mkdir(mode=0o700, parents=True, exist_ok=True)
|
|
68
|
+
metadata = directory.lstat()
|
|
69
|
+
if stat.S_ISLNK(metadata.st_mode) or not stat.S_ISDIR(metadata.st_mode):
|
|
70
|
+
raise OSError(f"Unsafe spill session directory: {directory}")
|
|
71
|
+
if os.chmod in os.supports_follow_symlinks:
|
|
72
|
+
os.chmod(directory, 0o700, follow_symlinks=False)
|
|
73
|
+
else:
|
|
74
|
+
# Platforms without no-follow chmod also lack the directory-fd path
|
|
75
|
+
# below. Re-check immediately before the best available fallback.
|
|
76
|
+
if directory.is_symlink():
|
|
77
|
+
raise OSError(f"Unsafe spill session directory: {directory}")
|
|
78
|
+
os.chmod(directory, 0o700)
|
|
79
|
+
return directory
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
def _open_session_dir(root: Path, session_id: str) -> tuple[Path, int | None]:
|
|
83
|
+
"""Open a session directory without following a pre-planted symlink."""
|
|
84
|
+
supports_safe_open = (
|
|
85
|
+
os.open in os.supports_dir_fd
|
|
86
|
+
and os.mkdir in os.supports_dir_fd
|
|
87
|
+
and hasattr(os, "O_DIRECTORY")
|
|
88
|
+
and hasattr(os, "O_NOFOLLOW")
|
|
89
|
+
and hasattr(os, "fchmod")
|
|
90
|
+
)
|
|
91
|
+
if not supports_safe_open:
|
|
92
|
+
return session_dir(root, session_id), None
|
|
93
|
+
|
|
94
|
+
name = _session_name(session_id)
|
|
95
|
+
root_flags = os.O_RDONLY | os.O_DIRECTORY
|
|
96
|
+
root_fd = os.open(root, root_flags)
|
|
97
|
+
try:
|
|
98
|
+
try:
|
|
99
|
+
os.mkdir(name, 0o700, dir_fd=root_fd)
|
|
100
|
+
except FileExistsError:
|
|
101
|
+
pass
|
|
102
|
+
flags = os.O_RDONLY | os.O_DIRECTORY | os.O_NOFOLLOW
|
|
103
|
+
directory_fd = os.open(name, flags, dir_fd=root_fd)
|
|
104
|
+
finally:
|
|
105
|
+
os.close(root_fd)
|
|
106
|
+
|
|
107
|
+
try:
|
|
108
|
+
os.fchmod(directory_fd, 0o700)
|
|
109
|
+
except Exception:
|
|
110
|
+
os.close(directory_fd)
|
|
111
|
+
raise
|
|
112
|
+
return root / name, directory_fd
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
def safe_filename(tool_name: str) -> str:
|
|
116
|
+
"""Convert an untrusted tool name into one harmless filename segment."""
|
|
117
|
+
raw = f"{tool_name}.txt".replace("\x00", "_")
|
|
118
|
+
safe = _UNSAFE_NAME.sub("_", raw.replace("/", "_").replace("\\", "_"))
|
|
119
|
+
while ".." in safe:
|
|
120
|
+
safe = safe.replace("..", "_")
|
|
121
|
+
safe = safe.strip(".")
|
|
122
|
+
return safe or "tool.txt"
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
def save_text(
|
|
126
|
+
content: str,
|
|
127
|
+
tool_name: str,
|
|
128
|
+
configured_root: str | None = None,
|
|
129
|
+
session_id: str | None = None,
|
|
130
|
+
) -> Path:
|
|
131
|
+
"""Persist ``content`` verbatim with exclusive owner-only creation."""
|
|
132
|
+
root = private_root(configured_root)
|
|
133
|
+
directory, directory_fd = _open_session_dir(
|
|
134
|
+
root, session_id or current_session_id()
|
|
135
|
+
)
|
|
136
|
+
filename = f"{secrets.token_hex(6)}-{safe_filename(tool_name)}"
|
|
137
|
+
path = directory / filename
|
|
138
|
+
flags = os.O_WRONLY | os.O_CREAT | os.O_EXCL
|
|
139
|
+
descriptor = -1
|
|
140
|
+
try:
|
|
141
|
+
if directory_fd is None:
|
|
142
|
+
descriptor = os.open(path, flags, 0o600)
|
|
143
|
+
else:
|
|
144
|
+
descriptor = os.open(filename, flags, 0o600, dir_fd=directory_fd)
|
|
145
|
+
if hasattr(os, "fchmod"):
|
|
146
|
+
os.fchmod(descriptor, 0o600)
|
|
147
|
+
with os.fdopen(descriptor, "w", encoding="utf-8", newline="") as spill_file:
|
|
148
|
+
descriptor = -1
|
|
149
|
+
spill_file.write(content)
|
|
150
|
+
finally:
|
|
151
|
+
if descriptor >= 0:
|
|
152
|
+
os.close(descriptor)
|
|
153
|
+
if directory_fd is not None:
|
|
154
|
+
os.close(directory_fd)
|
|
155
|
+
return path
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
def _reset_state() -> None:
|
|
159
|
+
"""Forget lazy process state; test cleanup remains the caller's job."""
|
|
160
|
+
global _default_root, _process_session_id
|
|
161
|
+
with _state_lock:
|
|
162
|
+
_default_root = None
|
|
163
|
+
_process_session_id = None
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
__all__ = [
|
|
167
|
+
"_reset_state",
|
|
168
|
+
"current_session_id",
|
|
169
|
+
"private_root",
|
|
170
|
+
"safe_filename",
|
|
171
|
+
"save_text",
|
|
172
|
+
"session_dir",
|
|
173
|
+
]
|
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
"""Private local storage for spilled tool-result text."""
|
|
2
|
-
|
|
3
|
-
from __future__ import annotations
|
|
4
|
-
|
|
5
|
-
import hashlib
|
|
6
|
-
import os
|
|
7
|
-
import re
|
|
8
|
-
import secrets
|
|
9
|
-
import tempfile
|
|
10
|
-
import uuid
|
|
11
|
-
from pathlib import Path
|
|
12
|
-
|
|
13
|
-
_default_root: Path | None = None
|
|
14
|
-
_process_session_id: str | None = None
|
|
15
|
-
_UNSAFE_NAME = re.compile(r"[^A-Za-z0-9._-]+")
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
def private_root(configured_root: str | None = None) -> Path:
|
|
19
|
-
"""Return the configured root or a lazy private per-process temp root."""
|
|
20
|
-
global _default_root
|
|
21
|
-
if configured_root:
|
|
22
|
-
root = Path(configured_root).expanduser().resolve()
|
|
23
|
-
root.mkdir(mode=0o700, parents=True, exist_ok=True)
|
|
24
|
-
return root
|
|
25
|
-
if _default_root is None:
|
|
26
|
-
_default_root = Path(tempfile.mkdtemp(prefix="code-puppy-spill-"))
|
|
27
|
-
return _default_root
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
def current_session_id() -> str:
|
|
31
|
-
"""Return the active agent session id, with a stable process fallback."""
|
|
32
|
-
global _process_session_id
|
|
33
|
-
try:
|
|
34
|
-
from code_puppy.messaging import get_session_context
|
|
35
|
-
|
|
36
|
-
session_id = get_session_context()
|
|
37
|
-
if session_id:
|
|
38
|
-
return str(session_id)
|
|
39
|
-
except Exception:
|
|
40
|
-
pass
|
|
41
|
-
if _process_session_id is None:
|
|
42
|
-
_process_session_id = uuid.uuid4().hex
|
|
43
|
-
return _process_session_id
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
def session_dir(root: Path, session_id: str) -> Path:
|
|
47
|
-
"""Create and return a private, hashed session directory under ``root``."""
|
|
48
|
-
digest = hashlib.sha256(session_id.encode("utf-8")).hexdigest()[:12]
|
|
49
|
-
directory = root / f"session-{digest}"
|
|
50
|
-
directory.mkdir(mode=0o700, parents=True, exist_ok=True)
|
|
51
|
-
os.chmod(directory, 0o700)
|
|
52
|
-
return directory
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
def safe_filename(tool_name: str) -> str:
|
|
56
|
-
"""Convert an untrusted tool name into one harmless filename segment."""
|
|
57
|
-
raw = f"{tool_name}.txt".replace("\x00", "_")
|
|
58
|
-
safe = _UNSAFE_NAME.sub("_", raw.replace("/", "_").replace("\\", "_"))
|
|
59
|
-
while ".." in safe:
|
|
60
|
-
safe = safe.replace("..", "_")
|
|
61
|
-
safe = safe.strip(".")
|
|
62
|
-
return safe or "tool.txt"
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
def save_text(content: str, tool_name: str, configured_root: str | None = None) -> Path:
|
|
66
|
-
"""Persist ``content`` verbatim with exclusive owner-only creation."""
|
|
67
|
-
root = private_root(configured_root)
|
|
68
|
-
directory = session_dir(root, current_session_id())
|
|
69
|
-
path = directory / f"{secrets.token_hex(6)}-{safe_filename(tool_name)}"
|
|
70
|
-
flags = os.O_WRONLY | os.O_CREAT | os.O_EXCL
|
|
71
|
-
descriptor = os.open(path, flags, 0o600)
|
|
72
|
-
try:
|
|
73
|
-
with os.fdopen(descriptor, "w", encoding="utf-8", newline="") as spill_file:
|
|
74
|
-
descriptor = -1
|
|
75
|
-
spill_file.write(content)
|
|
76
|
-
os.chmod(path, 0o600)
|
|
77
|
-
finally:
|
|
78
|
-
if descriptor >= 0:
|
|
79
|
-
os.close(descriptor)
|
|
80
|
-
return path
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
def _reset_state() -> None:
|
|
84
|
-
"""Forget lazy process state; test cleanup remains the caller's job."""
|
|
85
|
-
global _default_root, _process_session_id
|
|
86
|
-
_default_root = None
|
|
87
|
-
_process_session_id = None
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
__all__ = [
|
|
91
|
-
"_reset_state",
|
|
92
|
-
"current_session_id",
|
|
93
|
-
"private_root",
|
|
94
|
-
"safe_filename",
|
|
95
|
-
"save_text",
|
|
96
|
-
"session_dir",
|
|
97
|
-
]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/acp/agent.py
RENAMED
|
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
|
{code_puppy_core_plugins-0.0.5 → code_puppy_core_plugins-0.0.6}/code_puppy_core_plugins/acp/state.py
RENAMED
|
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
|