code-puppy-core-plugins 0.0.72__tar.gz → 0.0.73__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.72 → code_puppy_core_plugins-0.0.73}/PKG-INFO +11 -1
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/jev_grep/chunks.py +7 -5
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/jev_grep/structure.py +15 -2
- code_puppy_core_plugins-0.0.73/code_puppy_core_plugins/jev_grep/treesitter.py +409 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/pyproject.toml +11 -1
- code_puppy_core_plugins-0.0.72/code_puppy_core_plugins/jev_grep/treesitter.py +0 -249
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/.gitignore +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/LICENSE +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/README.md +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/THIRD_PARTY_NOTICES.md +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/acp/README.md +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/acp/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/acp/agent.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/acp/bridge.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/acp/capabilities.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/acp/commands.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/acp/content.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/acp/io_delegation.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/acp/mcp_config.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/acp/permissions.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/acp/persistence.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/acp/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/acp/replay.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/acp/session.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/acp/session_config.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/acp/state.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/agent_creator_skill/SKILL.md +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/agent_creator_skill/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/agent_creator_skill/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/agent_skills/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/agent_skills/config.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/agent_skills/discovery.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/agent_skills/enabled_skills.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/agent_skills/metadata.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/agent_skills/prompt_builder.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/agent_skills/provider.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/agent_skills/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/agent_skills/skill_commands.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/agent_skills/skills_menu.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/attachment_references/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/attachment_references/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/attachment_references/tool.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/auto_continue/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/auto_continue/classifier.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/auto_continue/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/aws_bedrock/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/aws_bedrock/config.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/aws_bedrock/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/aws_bedrock/utils.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/azure_foundry/README.md +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/azure_foundry/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/azure_foundry/config.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/azure_foundry/discovery.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/azure_foundry/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/azure_foundry/token.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/azure_foundry/utils.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/background_agents/README.md +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/background_agents/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/background_agents/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/btw/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/btw/inline_view.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/btw/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/btw/side_query.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/chatgpt_oauth/IMAGEGEN_SKILL.md +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/chatgpt_oauth/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/chatgpt_oauth/config.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/chatgpt_oauth/image_generation.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/chatgpt_oauth/image_tool.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/chatgpt_oauth/model_catalog.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/chatgpt_oauth/oauth_flow.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/chatgpt_oauth/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/chatgpt_oauth/test_plugin.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/chatgpt_oauth/usage.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/chatgpt_oauth/utils.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/claude_code_hooks/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/claude_code_hooks/config.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/claude_code_hooks/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/claude_code_hooks/trust.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/claude_code_oauth/README.md +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/claude_code_oauth/SETUP.md +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/claude_code_oauth/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/claude_code_oauth/config.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/claude_code_oauth/fast_mode.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/claude_code_oauth/model_filter.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/claude_code_oauth/model_provider.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/claude_code_oauth/prompt_handler.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/claude_code_oauth/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/claude_code_oauth/runtime_credentials.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/claude_code_oauth/test_plugin.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/claude_code_oauth/token_refresh_heartbeat.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/claude_code_oauth/token_store.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/claude_code_oauth/utils.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/code_puppy_agent/AGENTS_AND_TOOLS.md +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/code_puppy_agent/MODELS_AND_MCP.md +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/code_puppy_agent/PLUGINS_AND_CALLBACKS.md +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/code_puppy_agent/SESSIONS_AND_HISTORY.md +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/code_puppy_agent/SKILL.md +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/code_puppy_agent/SKILLS_SYSTEM.md +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/code_puppy_agent/SYSTEM_PROMPT_CONFIG_AND_I18N.md +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/code_puppy_agent/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/code_puppy_agent/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/completion_notification/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/completion_notification/config.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/completion_notification/locales/en-US.json +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/completion_notification/locales/es.json +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/completion_notification/locales/fr-CA.json +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/completion_notification/notifier.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/completion_notification/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/computer_use/NativeCapture.swift +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/computer_use/README.md +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/computer_use/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/computer_use/accessibility.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/computer_use/activation.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/computer_use/backend.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/computer_use/backend_types.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/computer_use/capture.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/computer_use/commands.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/computer_use/geometry.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/computer_use/inline_image.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/computer_use/keycodes.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/computer_use/policy.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/computer_use/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/computer_use/safety.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/computer_use/settle.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/computer_use/state.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/computer_use/tools.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/context_indicator/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/context_indicator/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/context_indicator/usage.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/copilot_auth/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/copilot_auth/config.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/copilot_auth/reasoning_client.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/copilot_auth/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/copilot_auth/responses_stream.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/copilot_auth/utils.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/customizable_commands/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/customizable_commands/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/dbos_durable_exec/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/dbos_durable_exec/cancel.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/dbos_durable_exec/commands.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/dbos_durable_exec/config.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/dbos_durable_exec/lifecycle.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/dbos_durable_exec/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/dbos_durable_exec/runtime.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/dbos_durable_exec/startup_lock.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/dbos_durable_exec/workflow_ids.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/dbos_durable_exec/wrapper.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/destructive_command_guard/AGENTS.md +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/destructive_command_guard/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/destructive_command_guard/detector.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/destructive_command_guard/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/emoji_filter/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/emoji_filter/config.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/emoji_filter/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/emoji_filter/stripper.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/empty_html_comment_filter/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/example_custom_command/README.md +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/example_custom_command/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/file_permission_handler/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/file_permission_handler/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/flux_bootstrap/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/_docs/README.md +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/_docs/cheatsheet.md +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/_docs/pipeline.md +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/_docs/synopsis.md +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/about.md +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/address-feedback.md +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/ask.md +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/aug.md +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/auto-pilot.md +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/cheatsheet.md +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/commit.md +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/config.md +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/create-pr.md +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/exec.md +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/new.md +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/qa.md +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/rebase.md +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/review.md +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/split.md +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/squash-commits.md +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/status.md +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/tests.md +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/flux_bootstrap/bundled/scripts/flux_about.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/flux_bootstrap/bundled/scripts/flux_cheatsheet.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/flux_bootstrap/bundled/scripts/flux_status.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/flux_bootstrap/installer.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/flux_bootstrap/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/force_push_guard/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/force_push_guard/detector.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/force_push_guard/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/fork/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/fork/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/frontend_emitter/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/frontend_emitter/emitter.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/frontend_emitter/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/frontend_emitter/session_context.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/grok_oauth/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/grok_oauth/config.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/grok_oauth/oauth_flow.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/grok_oauth/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/grok_oauth/utils.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/herdr/README.md +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/herdr/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/herdr/client.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/herdr/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/herdr/reporter.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/herdr/restore.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/herdr/smoke.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/herdr/sources.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/hook_creator/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/hook_creator/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/hook_manager/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/hook_manager/config.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/hook_manager/hooks_menu.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/hook_manager/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/hook_manager/trust_handler.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/jev_grep/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/jev_grep/config.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/jev_grep/judge.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/jev_grep/locales/en-US.json +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/jev_grep/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/jev_grep/retrieve.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/jev_grep/search.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/jev_grep/tool.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/logfire_oauth/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/logfire_oauth/oauth.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/logfire_oauth/query_tool.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/logfire_oauth/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/logfire_sessions/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/logfire_sessions/mirror.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/logfire_sessions/query.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/logfire_sessions/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/logfire_sessions/sync.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/mcp_binding_prompt/README.md +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/mcp_binding_prompt/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/mcp_binding_prompt/custom_install.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/mcp_binding_prompt/http_form.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/mcp_binding_prompt/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/meta_oauth/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/meta_oauth/config.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/meta_oauth/oauth_flow.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/meta_oauth/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/meta_oauth/utils.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/namespace_skill_search/README.md +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/namespace_skill_search/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/namespace_skill_search/namespaces.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/namespace_skill_search/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/namespace_skill_search/search_tool.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/no_tools/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/no_tools/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/oauth_pasteback.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/oauth_puppy_html.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/obsidian_agent/README.md +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/obsidian_agent/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/obsidian_agent/agent_obsidian.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/obsidian_agent/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/ollama/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/ollama/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/ollama_setup/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/ollama_setup/completer.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/ollama_setup/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/openrouter_oauth/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/openrouter_oauth/config.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/openrouter_oauth/oauth_flow.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/openrouter_oauth/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/openrouter_oauth/test_plugin.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/plugin_list/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/plugin_list/plugin_contributions.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/plugin_list/plugin_meta.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/plugin_list/plugin_text_utils.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/plugin_list/plugins_menu.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/plugin_list/plugins_menu_render.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/plugin_list/project_trust_flow.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/plugin_list/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/pop_command/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/pop_command/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/profiles/README.md +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/profiles/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/profiles/config.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/profiles/locales/en-US.json +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/profiles/menu.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/profiles/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/prompt_newline/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/prompt_newline/config.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/prompt_newline/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/prune/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/prune/prune_menu.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/prune/prune_model.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/prune/prune_render.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/prune/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/puppy_kennel/README.md +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/puppy_kennel/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/puppy_kennel/commands.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/puppy_kennel/config.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/puppy_kennel/kennel.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/puppy_kennel/packer.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/puppy_kennel/recorder.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/puppy_kennel/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/puppy_kennel/retriever.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/puppy_kennel/schema.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/puppy_kennel/state.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/puppy_kennel/tools.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/puppy_kennel/wings.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/puppy_spinner/README.md +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/puppy_spinner/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/puppy_spinner/builtin_frames.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/puppy_spinner/commands.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/puppy_spinner/picker.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/puppy_spinner/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/puppy_spinner/spinners.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/qa_kitten_skill/SKILL.md +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/qa_kitten_skill/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/qa_kitten_skill/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/quick_resume/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/quick_resume/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/review_pr/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/review_pr/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/session_namer/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/session_namer/namer.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/session_namer/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/spill/LICENSE.deepseek +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/spill/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/spill/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/spill/store.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/stack_dump/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/stack_dump/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/statusline/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/statusline/config.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/statusline/payload.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/statusline/prompt_patch.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/statusline/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/statusline/runner.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/statusline/statusline_command.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/steer_queue/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/steer_queue/queue_menu.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/steer_queue/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/subagent_panel/README.md +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/subagent_panel/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/subagent_panel/coalesce_patch.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/subagent_panel/panel_render.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/subagent_panel/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/subagent_panel/resume_repaint.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/subagent_panel/state.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/switch_agent_resume/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/switch_agent_resume/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/termflow_tui.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/theme/README.md +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/theme/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/theme/bundled_palettes.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/theme/content_styles.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/theme/osc_palette.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/theme/picker.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/theme/prompt_toolkit_theme.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/theme/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/theme/rich_themes.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/theme/themes.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/timestamp_heartbeat/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/timestamp_heartbeat/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/token_ratio_learner/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/token_ratio_learner/ratios.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/token_ratio_learner/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/universal_constructor/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/universal_constructor/models.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/universal_constructor/provider.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/universal_constructor/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/universal_constructor/registry.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/universal_constructor/sandbox.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/web_retriever_skill/SKILL.md +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/web_retriever_skill/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/web_retriever_skill/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/wiggum/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/wiggum/goal_runs.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/wiggum/judge.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/wiggum/judge_config.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/wiggum/judges_menu.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/wiggum/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/wiggum/state.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/code_puppy_core_plugins/yolo_cli/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.73}/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.73
|
|
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
|
|
@@ -18,10 +18,20 @@ Requires-Python: <3.15,>=3.11
|
|
|
18
18
|
Requires-Dist: httpx2>=2.7
|
|
19
19
|
Requires-Dist: httpx<1,>=0.24.1
|
|
20
20
|
Requires-Dist: pydantic-ai-slim[anthropic,mcp,openai,typesafe]<3,>=2.51.0
|
|
21
|
+
Requires-Dist: tree-sitter-bash>=0.25.1
|
|
22
|
+
Requires-Dist: tree-sitter-c-sharp>=0.23.5
|
|
23
|
+
Requires-Dist: tree-sitter-c>=0.24.2
|
|
24
|
+
Requires-Dist: tree-sitter-cpp>=0.23.4
|
|
21
25
|
Requires-Dist: tree-sitter-go>=0.25.0
|
|
22
26
|
Requires-Dist: tree-sitter-java>=0.23.5
|
|
23
27
|
Requires-Dist: tree-sitter-javascript>=0.25.0
|
|
28
|
+
Requires-Dist: tree-sitter-kotlin>=1.1.0
|
|
29
|
+
Requires-Dist: tree-sitter-lua>=0.5.0
|
|
30
|
+
Requires-Dist: tree-sitter-php>=0.24.1
|
|
31
|
+
Requires-Dist: tree-sitter-ruby>=0.23.1
|
|
24
32
|
Requires-Dist: tree-sitter-rust>=0.24.2
|
|
33
|
+
Requires-Dist: tree-sitter-scala>=0.26.2
|
|
34
|
+
Requires-Dist: tree-sitter-swift>=0.7.3
|
|
25
35
|
Requires-Dist: tree-sitter-typescript>=0.23.2
|
|
26
36
|
Requires-Dist: tree-sitter<0.26,>=0.25.2
|
|
27
37
|
Description-Content-Type: text/markdown
|
|
@@ -2,10 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
Source files are split along their syntax tree (see ``structure.py``):
|
|
4
4
|
functions and methods stay whole, long declarations split into the blocks
|
|
5
|
-
inside them. Python uses the stdlib ``ast``;
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
is exact: every non-blank
|
|
5
|
+
inside them. Python uses the stdlib ``ast``; fourteen more languages use
|
|
6
|
+
tree-sitter (``treesitter.py``), where regions that do not parse fall back to
|
|
7
|
+
overlapping line windows. Other file types, and Python that does not parse,
|
|
8
|
+
are cut into line windows entirely. Line coverage is exact: every non-blank
|
|
9
|
+
line lands in at least one snippet.
|
|
9
10
|
"""
|
|
10
11
|
|
|
11
12
|
from __future__ import annotations
|
|
@@ -96,7 +97,8 @@ def _chunks_from_ranges(
|
|
|
96
97
|
continue
|
|
97
98
|
part = lines[start - 1 : end]
|
|
98
99
|
whole = (
|
|
99
|
-
|
|
100
|
+
not r.window
|
|
101
|
+
and end - start < WHOLE_DECLARATION_LINES
|
|
100
102
|
and len("\n".join(part)) <= MAX_CHUNK_CHARS
|
|
101
103
|
)
|
|
102
104
|
size, overlap = (len(part), 0) if whole else (WINDOW, OVERLAP)
|
|
@@ -10,7 +10,10 @@ One algorithm for every parser. A language plugs in by implementing
|
|
|
10
10
|
them, so each range is one behaviour. Splits cover every line of the
|
|
11
11
|
original range, so coverage is unchanged;
|
|
12
12
|
* runs of short neighbours (imports, one-liners) merge into one range,
|
|
13
|
-
since each range costs a relevance judgment
|
|
13
|
+
since each range costs a relevance judgment;
|
|
14
|
+
* a node the parser could not read cleanly is not split or trusted: it
|
|
15
|
+
becomes a ``window`` range, cut into overlapping line windows like an
|
|
16
|
+
unparsed file. One bad macro costs its own region, not the whole file.
|
|
14
17
|
"""
|
|
15
18
|
|
|
16
19
|
from __future__ import annotations
|
|
@@ -29,6 +32,7 @@ class Range:
|
|
|
29
32
|
start: int
|
|
30
33
|
end: int
|
|
31
34
|
symbol: str | None
|
|
35
|
+
window: bool = False # parse error inside: use line windows, not one blob
|
|
32
36
|
|
|
33
37
|
|
|
34
38
|
class Syntax(Protocol):
|
|
@@ -46,6 +50,9 @@ class Syntax(Protocol):
|
|
|
46
50
|
def statements(self, node: Any) -> Sequence[Any] | None:
|
|
47
51
|
"""The statements of ``node``'s body, if it has one."""
|
|
48
52
|
|
|
53
|
+
def broken(self, node: Any) -> bool:
|
|
54
|
+
"""True when the parser could not read ``node`` cleanly."""
|
|
55
|
+
|
|
49
56
|
|
|
50
57
|
def partition(node: Any, start: int, end: int, symbol, syntax: Syntax, depth=0):
|
|
51
58
|
"""Split a long body into its blocks, covering every line of [start, end]."""
|
|
@@ -106,6 +113,9 @@ def structure_ranges(nodes: Sequence[Any], syntax: Syntax) -> list[Range]:
|
|
|
106
113
|
if ranges and ranges[-1].end < end:
|
|
107
114
|
ranges[-1].end = end
|
|
108
115
|
return
|
|
116
|
+
if syntax.broken(node):
|
|
117
|
+
ranges.append(Range(start, end, symbol, window=True))
|
|
118
|
+
return
|
|
109
119
|
ranges.extend(
|
|
110
120
|
partition(node, start, end, symbol, syntax) or [Range(start, end, symbol)]
|
|
111
121
|
)
|
|
@@ -139,7 +149,7 @@ def merge_short_neighbours(ranges: list[Range]) -> list[Range]:
|
|
|
139
149
|
names = dict.fromkeys(s for s in (last.symbol, r.symbol) if s)
|
|
140
150
|
last.end, last.symbol = r.end, ", ".join(names) or None
|
|
141
151
|
else:
|
|
142
|
-
merged.append(Range(r.start, r.end, r.symbol))
|
|
152
|
+
merged.append(Range(r.start, r.end, r.symbol, r.window))
|
|
143
153
|
return merged
|
|
144
154
|
|
|
145
155
|
|
|
@@ -162,6 +172,9 @@ class PythonSyntax:
|
|
|
162
172
|
return None
|
|
163
173
|
return [s for s in body if hasattr(s, "end_lineno")]
|
|
164
174
|
|
|
175
|
+
def broken(self, node: ast.AST) -> bool:
|
|
176
|
+
return False # ast.parse either succeeds for the whole file or raises
|
|
177
|
+
|
|
165
178
|
|
|
166
179
|
def python_ranges(text: str) -> list[Range]:
|
|
167
180
|
"""Raises SyntaxError/ValueError/RecursionError on unparseable source."""
|
|
@@ -0,0 +1,409 @@
|
|
|
1
|
+
"""tree-sitter :class:`~.structure.Syntax` for JavaScript/TypeScript, Go, Rust,
|
|
2
|
+
Java, C, C++, C#, Ruby, PHP, Kotlin, Swift, Scala, Bash and Lua.
|
|
3
|
+
|
|
4
|
+
Grammars are pinned, offline wheels (one package per language); nothing is
|
|
5
|
+
downloaded at runtime. They are optional at runtime: if tree-sitter or a
|
|
6
|
+
grammar cannot be imported (e.g. an unsupported platform) or the installed
|
|
7
|
+
tree-sitter is a known-bad version, :func:`treesitter_ranges` returns
|
|
8
|
+
``None`` and the caller falls back to line windows. A file with parse errors
|
|
9
|
+
(macros, newer syntax than the grammar knows) keeps its structure where the
|
|
10
|
+
tree is clean; only the broken regions fall back to line windows.
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
from __future__ import annotations
|
|
14
|
+
|
|
15
|
+
import importlib
|
|
16
|
+
import os
|
|
17
|
+
from collections.abc import Callable, Iterable, Sequence
|
|
18
|
+
from functools import cache
|
|
19
|
+
from importlib.metadata import PackageNotFoundError, version
|
|
20
|
+
from typing import Any
|
|
21
|
+
|
|
22
|
+
from .structure import Range, structure_ranges
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def _grammar(module: str, attr: str = "language") -> Callable[[], Any]:
|
|
26
|
+
"""A lazy loader for one grammar (the wheel is imported on first use)."""
|
|
27
|
+
|
|
28
|
+
def load() -> Any:
|
|
29
|
+
return getattr(importlib.import_module(module), attr)()
|
|
30
|
+
|
|
31
|
+
load.__qualname__ = f"load<{module}.{attr}>"
|
|
32
|
+
return load
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
_JAVASCRIPT = ("javascript", _grammar("tree_sitter_javascript"))
|
|
36
|
+
_TYPESCRIPT = ("typescript", _grammar("tree_sitter_typescript", "language_typescript"))
|
|
37
|
+
_C = ("c", _grammar("tree_sitter_c"))
|
|
38
|
+
_CPP = ("cpp", _grammar("tree_sitter_cpp"))
|
|
39
|
+
|
|
40
|
+
# extension -> (parser name, grammar loader)
|
|
41
|
+
LANGUAGES: dict[str, tuple[str, Callable[[], Any]]] = {
|
|
42
|
+
**dict.fromkeys((".js", ".jsx", ".mjs", ".cjs"), _JAVASCRIPT),
|
|
43
|
+
**dict.fromkeys((".ts", ".mts", ".cts"), _TYPESCRIPT),
|
|
44
|
+
".tsx": ("tsx", _grammar("tree_sitter_typescript", "language_tsx")),
|
|
45
|
+
".go": ("go", _grammar("tree_sitter_go")),
|
|
46
|
+
".rs": ("rust", _grammar("tree_sitter_rust")),
|
|
47
|
+
".java": ("java", _grammar("tree_sitter_java")),
|
|
48
|
+
".c": _C,
|
|
49
|
+
# .h is C or C++: parse as C++ (a near-superset), retry as C (_RETRY).
|
|
50
|
+
**dict.fromkeys(
|
|
51
|
+
(
|
|
52
|
+
".h",
|
|
53
|
+
".cc",
|
|
54
|
+
".cpp",
|
|
55
|
+
".cxx",
|
|
56
|
+
".c++",
|
|
57
|
+
".hh",
|
|
58
|
+
".hpp",
|
|
59
|
+
".hxx",
|
|
60
|
+
".h++",
|
|
61
|
+
".ipp",
|
|
62
|
+
".tpp",
|
|
63
|
+
".inl",
|
|
64
|
+
),
|
|
65
|
+
_CPP,
|
|
66
|
+
),
|
|
67
|
+
".cs": ("csharp", _grammar("tree_sitter_c_sharp")),
|
|
68
|
+
**dict.fromkeys(
|
|
69
|
+
(".rb", ".rake", ".gemspec"), ("ruby", _grammar("tree_sitter_ruby"))
|
|
70
|
+
),
|
|
71
|
+
".php": ("php", _grammar("tree_sitter_php", "language_php")),
|
|
72
|
+
**dict.fromkeys((".kt", ".kts"), ("kotlin", _grammar("tree_sitter_kotlin"))),
|
|
73
|
+
".swift": ("swift", _grammar("tree_sitter_swift")),
|
|
74
|
+
**dict.fromkeys((".scala", ".sc"), ("scala", _grammar("tree_sitter_scala"))),
|
|
75
|
+
**dict.fromkeys((".sh", ".bash"), ("bash", _grammar("tree_sitter_bash"))),
|
|
76
|
+
".lua": ("lua", _grammar("tree_sitter_lua")),
|
|
77
|
+
}
|
|
78
|
+
# Tried in order when the primary grammar leaves parse errors.
|
|
79
|
+
_RETRY: dict[str, tuple[tuple[str, Callable[[], Any]], ...]] = {".h": (_C,)}
|
|
80
|
+
|
|
81
|
+
# Declarations split into a header plus one range per member.
|
|
82
|
+
_CONTAINERS = frozenset(
|
|
83
|
+
{
|
|
84
|
+
"class_declaration", # Java, C#, PHP, Kotlin, Swift (class/struct/extension)
|
|
85
|
+
"abstract_class_declaration",
|
|
86
|
+
"class", # JS class expressions, Ruby
|
|
87
|
+
"enum_declaration",
|
|
88
|
+
"record_declaration",
|
|
89
|
+
"struct_declaration", # C#
|
|
90
|
+
"impl_item", # Rust
|
|
91
|
+
"trait_item",
|
|
92
|
+
"mod_item",
|
|
93
|
+
"class_specifier", # C++ (C structs are data and stay whole)
|
|
94
|
+
"module", # Ruby
|
|
95
|
+
"trait_declaration", # PHP
|
|
96
|
+
"object_declaration", # Kotlin
|
|
97
|
+
"companion_object",
|
|
98
|
+
"class_definition", # Scala
|
|
99
|
+
"object_definition",
|
|
100
|
+
"trait_definition",
|
|
101
|
+
}
|
|
102
|
+
)
|
|
103
|
+
# Bodies: of functions (statements) and of containers (members).
|
|
104
|
+
_BLOCKS = frozenset(
|
|
105
|
+
{
|
|
106
|
+
"statement_block",
|
|
107
|
+
"block",
|
|
108
|
+
"class_body",
|
|
109
|
+
"declaration_list",
|
|
110
|
+
"enum_body",
|
|
111
|
+
"switch_body",
|
|
112
|
+
"compound_statement", # C, C++, PHP, Bash
|
|
113
|
+
"body_statement", # Ruby
|
|
114
|
+
"function_body", # Kotlin, Swift
|
|
115
|
+
"template_body", # Scala
|
|
116
|
+
"enum_class_body", # Kotlin
|
|
117
|
+
}
|
|
118
|
+
)
|
|
119
|
+
# A body that holds its statements in one wrapper node (Go, Swift, Kotlin).
|
|
120
|
+
_STATEMENT_WRAPPERS = frozenset(
|
|
121
|
+
{"statement_list", "statements", "block", "body_statement"}
|
|
122
|
+
)
|
|
123
|
+
# Unwrapped wherever they appear: they scope code rather than being code.
|
|
124
|
+
# A namespace or include guard often wraps a whole file; kept, it would make
|
|
125
|
+
# the file one range.
|
|
126
|
+
_TRANSPARENT = frozenset(
|
|
127
|
+
{
|
|
128
|
+
"preproc_ifdef",
|
|
129
|
+
"preproc_if",
|
|
130
|
+
"preproc_else",
|
|
131
|
+
"preproc_elif",
|
|
132
|
+
"preproc_elifdef",
|
|
133
|
+
"namespace_definition", # C++, PHP (braced)
|
|
134
|
+
"namespace_declaration", # C#
|
|
135
|
+
"file_scoped_namespace_declaration", # C# `namespace X;`
|
|
136
|
+
"linkage_specification", # extern "C" { ... }
|
|
137
|
+
"declaration_list", # the body of the three above
|
|
138
|
+
}
|
|
139
|
+
)
|
|
140
|
+
_TRANSPARENT_FIELDS = ("name", "condition", "value") # the wrapper's own label
|
|
141
|
+
_WRAPPERS = frozenset({"export_statement", "template_declaration"})
|
|
142
|
+
# Never named: an imported name would earn BM25's symbol boost for a line
|
|
143
|
+
# that is almost never the answer (Python's ast leaves imports unnamed too).
|
|
144
|
+
_UNNAMED = frozenset(
|
|
145
|
+
{
|
|
146
|
+
"import_declaration",
|
|
147
|
+
"package_declaration",
|
|
148
|
+
"use_declaration",
|
|
149
|
+
"preproc_include",
|
|
150
|
+
"using_directive", # C#
|
|
151
|
+
"namespace_use_declaration", # PHP
|
|
152
|
+
"import", # Kotlin
|
|
153
|
+
"package_header",
|
|
154
|
+
"package_clause", # Scala
|
|
155
|
+
"command", # Bash: a call site, not a declaration
|
|
156
|
+
}
|
|
157
|
+
)
|
|
158
|
+
_DECLARATORS = frozenset({"lexical_declaration", "variable_declaration"})
|
|
159
|
+
# Where a C/C++ declarator chain ends in a name.
|
|
160
|
+
_DECLARATOR_NAMES = frozenset(
|
|
161
|
+
{
|
|
162
|
+
"identifier",
|
|
163
|
+
"field_identifier",
|
|
164
|
+
"type_identifier",
|
|
165
|
+
"qualified_identifier",
|
|
166
|
+
"destructor_name",
|
|
167
|
+
"operator_name",
|
|
168
|
+
}
|
|
169
|
+
)
|
|
170
|
+
_QUALIFIED = frozenset({"qualified_identifier", "method_index_expression"})
|
|
171
|
+
_SKIPPED = frozenset({"access_specifier"}) # C++ `public:` labels
|
|
172
|
+
_BODY_SEARCH_DEPTH = 4
|
|
173
|
+
_DECLARATOR_DEPTH = 8
|
|
174
|
+
_MAX_ABSORBED_TAIL = 3 # lines: a closing brace or #endif, not a comment block
|
|
175
|
+
|
|
176
|
+
# py-tree-sitter 0.26.0 segfaults walking ordinary trees (reproduced on
|
|
177
|
+
# CPython 3.13 and 3.14; 0.25.2 is clean on the same input). A native crash
|
|
178
|
+
# would kill the whole session, so refuse it even if something pins it.
|
|
179
|
+
_BROKEN_TREE_SITTER = ((0, 26),)
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
def _tree_sitter_is_safe() -> bool:
|
|
183
|
+
try:
|
|
184
|
+
major, minor = (int(p) for p in version("tree-sitter").split(".")[:2])
|
|
185
|
+
except (PackageNotFoundError, ValueError):
|
|
186
|
+
return False
|
|
187
|
+
return (major, minor) not in _BROKEN_TREE_SITTER
|
|
188
|
+
|
|
189
|
+
|
|
190
|
+
def _code_children(node: Any) -> list[Any]:
|
|
191
|
+
"""Named children minus comments and labels. A skipped leading comment is
|
|
192
|
+
absorbed into the declaration after it (as Python's ``ast``, which has no
|
|
193
|
+
comment nodes, already behaves)."""
|
|
194
|
+
return [
|
|
195
|
+
c
|
|
196
|
+
for c in node.named_children
|
|
197
|
+
if "comment" not in c.type and c.type not in _SKIPPED
|
|
198
|
+
]
|
|
199
|
+
|
|
200
|
+
|
|
201
|
+
def _flatten(nodes: Iterable[Any]) -> list[Any]:
|
|
202
|
+
"""Replace namespaces, include guards and ``extern "C"`` blocks with the
|
|
203
|
+
declarations inside them. Their own lines are absorbed by the neighbouring
|
|
204
|
+
ranges, so line coverage is unchanged."""
|
|
205
|
+
out: list[Any] = []
|
|
206
|
+
for node in nodes:
|
|
207
|
+
if node.type not in _TRANSPARENT:
|
|
208
|
+
out.append(node)
|
|
209
|
+
continue
|
|
210
|
+
labels = {
|
|
211
|
+
(c.start_byte, c.end_byte)
|
|
212
|
+
for field in _TRANSPARENT_FIELDS
|
|
213
|
+
if (c := node.child_by_field_name(field)) is not None
|
|
214
|
+
}
|
|
215
|
+
inner = [
|
|
216
|
+
c for c in _code_children(node) if (c.start_byte, c.end_byte) not in labels
|
|
217
|
+
]
|
|
218
|
+
out.extend(_flatten(inner))
|
|
219
|
+
return out
|
|
220
|
+
|
|
221
|
+
|
|
222
|
+
class TreeSitterSyntax:
|
|
223
|
+
""":class:`~.structure.Syntax` over any tree-sitter grammar.
|
|
224
|
+
|
|
225
|
+
Node text is sliced from the ``source`` bytes that were parsed, by byte
|
|
226
|
+
offset, so names come from exactly the input we hold.
|
|
227
|
+
"""
|
|
228
|
+
|
|
229
|
+
def __init__(self, source: bytes) -> None:
|
|
230
|
+
self._source = source
|
|
231
|
+
|
|
232
|
+
def _text(self, node: Any) -> str:
|
|
233
|
+
return self._source[node.start_byte : node.end_byte].decode(
|
|
234
|
+
"utf-8", errors="replace"
|
|
235
|
+
)
|
|
236
|
+
|
|
237
|
+
@staticmethod
|
|
238
|
+
def _inner(node: Any) -> Any:
|
|
239
|
+
"""The declaration an ``export`` or ``template<...>`` wraps (the wrapper
|
|
240
|
+
keeps the span)."""
|
|
241
|
+
if node.type == "export_statement":
|
|
242
|
+
inner = node.child_by_field_name("declaration")
|
|
243
|
+
if inner is not None:
|
|
244
|
+
return inner
|
|
245
|
+
elif node.type == "template_declaration":
|
|
246
|
+
children = _code_children(node)
|
|
247
|
+
if children and children[-1].type != "template_parameter_list":
|
|
248
|
+
return children[-1]
|
|
249
|
+
return node
|
|
250
|
+
|
|
251
|
+
def span(self, node: Any) -> tuple[int, int]:
|
|
252
|
+
start = node.start_point.row + 1
|
|
253
|
+
end = node.end_point.row + (1 if node.end_point.column else 0)
|
|
254
|
+
return start, max(start, end)
|
|
255
|
+
|
|
256
|
+
def _name(self, node: Any) -> str:
|
|
257
|
+
text = self._text(node)
|
|
258
|
+
if node.type in _QUALIFIED: # C++ Server::port, Lua Account:deposit
|
|
259
|
+
text = text.replace("::", ".").replace(":", ".")
|
|
260
|
+
return text
|
|
261
|
+
|
|
262
|
+
def symbol(self, node: Any) -> str | None:
|
|
263
|
+
node = self._inner(node)
|
|
264
|
+
if node.type in _UNNAMED:
|
|
265
|
+
return None
|
|
266
|
+
if node.type == "impl_item": # `impl Cache` / `impl Trait for Cache`
|
|
267
|
+
target = node.child_by_field_name("type")
|
|
268
|
+
return self._text(target) if target is not None else None
|
|
269
|
+
name = node.child_by_field_name("name")
|
|
270
|
+
if name is None:
|
|
271
|
+
declared = self._declarator_name(node) # C/C++: int *make_buf(...)
|
|
272
|
+
if declared:
|
|
273
|
+
return declared
|
|
274
|
+
if node.type in _DECLARATORS or node.type.endswith("_declaration"):
|
|
275
|
+
return self._declared_names(node) # const a, b / Go type / Java field
|
|
276
|
+
return None
|
|
277
|
+
receiver = node.child_by_field_name("receiver") # Go: (s *Server) Serve
|
|
278
|
+
if receiver is not None:
|
|
279
|
+
owner = self._receiver_type(receiver)
|
|
280
|
+
if owner:
|
|
281
|
+
return f"{owner}.{self._text(name)}"
|
|
282
|
+
return self._name(name)
|
|
283
|
+
|
|
284
|
+
def _declarator_name(self, node: Any) -> str | None:
|
|
285
|
+
"""Follow a C/C++ declarator chain (pointer -> function -> name)."""
|
|
286
|
+
current = node.child_by_field_name("declarator")
|
|
287
|
+
for _ in range(_DECLARATOR_DEPTH):
|
|
288
|
+
if current is None:
|
|
289
|
+
return None
|
|
290
|
+
if current.type in _DECLARATOR_NAMES:
|
|
291
|
+
return self._name(current)
|
|
292
|
+
children = current.named_children
|
|
293
|
+
current = current.child_by_field_name("declarator") or (
|
|
294
|
+
children[0] if children else None
|
|
295
|
+
)
|
|
296
|
+
return None
|
|
297
|
+
|
|
298
|
+
def _declared_names(self, node: Any) -> str | None:
|
|
299
|
+
"""Names one level down: ``const a, b``, Go ``type_spec``, Java fields."""
|
|
300
|
+
candidates = [node.child_by_field_name("declarator"), *node.named_children]
|
|
301
|
+
names = dict.fromkeys(
|
|
302
|
+
self._text(name)
|
|
303
|
+
for child in candidates
|
|
304
|
+
if child is not None and (name := child.child_by_field_name("name"))
|
|
305
|
+
)
|
|
306
|
+
return ", ".join(names) or None
|
|
307
|
+
|
|
308
|
+
def _receiver_type(self, receiver: Any) -> str | None:
|
|
309
|
+
for param in receiver.named_children:
|
|
310
|
+
kind = param.child_by_field_name("type")
|
|
311
|
+
if kind is not None:
|
|
312
|
+
return self._text(kind).lstrip("*&").split("[", 1)[0] or None
|
|
313
|
+
return None
|
|
314
|
+
|
|
315
|
+
def members(self, node: Any) -> Sequence[Any] | None:
|
|
316
|
+
node = self._inner(node)
|
|
317
|
+
if node.type not in _CONTAINERS:
|
|
318
|
+
return None
|
|
319
|
+
body = node.child_by_field_name("body") or next(
|
|
320
|
+
(c for c in node.named_children if c.type in _BLOCKS), None
|
|
321
|
+
)
|
|
322
|
+
members = _flatten(_code_children(body)) if body is not None else []
|
|
323
|
+
# Only one-line members (fields, enum constants, prototypes, interface
|
|
324
|
+
# signatures): keep the declaration whole. A range per line would cost
|
|
325
|
+
# a judgment each and hold no behaviour.
|
|
326
|
+
if all(self.span(m)[1] - self.span(m)[0] < 1 for m in members):
|
|
327
|
+
return None
|
|
328
|
+
return members
|
|
329
|
+
|
|
330
|
+
def broken(self, node: Any) -> bool:
|
|
331
|
+
return node.type == "ERROR" or node.has_error
|
|
332
|
+
|
|
333
|
+
def statements(self, node: Any) -> Sequence[Any] | None:
|
|
334
|
+
block = _body_block(self._inner(node))
|
|
335
|
+
if block is None:
|
|
336
|
+
return None
|
|
337
|
+
children = _code_children(block)
|
|
338
|
+
for _ in range(_BODY_SEARCH_DEPTH): # function_body -> block -> statements
|
|
339
|
+
if len(children) != 1 or children[0].type not in _STATEMENT_WRAPPERS:
|
|
340
|
+
break
|
|
341
|
+
children = _code_children(children[0])
|
|
342
|
+
return children or None
|
|
343
|
+
|
|
344
|
+
|
|
345
|
+
def _body_block(node: Any) -> Any | None:
|
|
346
|
+
"""The nearest block under ``node``: its own body, or one inside a wrapper
|
|
347
|
+
(``const f = () => {...}``, ``app.get("/x", (req, res) => {...})``)."""
|
|
348
|
+
if node.type in _BLOCKS:
|
|
349
|
+
return node
|
|
350
|
+
body = node.child_by_field_name("body")
|
|
351
|
+
if body is not None and body.type in _BLOCKS:
|
|
352
|
+
return body
|
|
353
|
+
frontier = list(node.named_children)
|
|
354
|
+
for _ in range(_BODY_SEARCH_DEPTH):
|
|
355
|
+
for child in frontier:
|
|
356
|
+
if child.type in _BLOCKS:
|
|
357
|
+
return child
|
|
358
|
+
frontier = [grand for child in frontier for grand in child.named_children]
|
|
359
|
+
return None
|
|
360
|
+
|
|
361
|
+
|
|
362
|
+
@cache
|
|
363
|
+
def _parser(loader: Callable[[], Any]) -> Any | None:
|
|
364
|
+
if not _tree_sitter_is_safe():
|
|
365
|
+
return None
|
|
366
|
+
try:
|
|
367
|
+
from tree_sitter import Language, Parser
|
|
368
|
+
|
|
369
|
+
return Parser(Language(loader()))
|
|
370
|
+
except Exception: # noqa: BLE001 - unavailable grammar => line windows
|
|
371
|
+
return None
|
|
372
|
+
|
|
373
|
+
|
|
374
|
+
def treesitter_ranges(text: str, path: str) -> tuple[list[Range], str] | None:
|
|
375
|
+
"""(ranges, parser name), or None when this file should use line windows."""
|
|
376
|
+
ext = os.path.splitext(path)[1].lower()
|
|
377
|
+
entry = LANGUAGES.get(ext)
|
|
378
|
+
if entry is None:
|
|
379
|
+
return None
|
|
380
|
+
source = text.encode("utf-8")
|
|
381
|
+
syntax = TreeSitterSyntax(source)
|
|
382
|
+
# First clean parse wins; otherwise the tree with the fewest broken lines.
|
|
383
|
+
best: tuple[int, str, Any, list[Any]] | None = None
|
|
384
|
+
for name, loader in (entry, *_RETRY.get(ext, ())):
|
|
385
|
+
parser = _parser(loader)
|
|
386
|
+
if parser is None:
|
|
387
|
+
continue
|
|
388
|
+
root = parser.parse(source).root_node
|
|
389
|
+
nodes = _flatten(_code_children(root))
|
|
390
|
+
broken = sum(
|
|
391
|
+
syntax.span(n)[1] - syntax.span(n)[0] + 1 for n in nodes if syntax.broken(n)
|
|
392
|
+
)
|
|
393
|
+
if best is None or broken < best[0]:
|
|
394
|
+
best = (broken, name, root, nodes)
|
|
395
|
+
if not broken:
|
|
396
|
+
break
|
|
397
|
+
if best is None:
|
|
398
|
+
return None
|
|
399
|
+
broken, name, root, nodes = best
|
|
400
|
+
ranges = structure_ranges(nodes, syntax)
|
|
401
|
+
if not ranges:
|
|
402
|
+
return None
|
|
403
|
+
# Close the last range over a short tail (a namespace's closing brace,
|
|
404
|
+
# an include guard's #endif) instead of leaving it to become a
|
|
405
|
+
# judgment-costing snippet of its own. Longer tails stay separate.
|
|
406
|
+
tail = syntax.span(root)[1]
|
|
407
|
+
if 0 < tail - ranges[-1].end <= _MAX_ABSORBED_TAIL:
|
|
408
|
+
ranges[-1].end = tail
|
|
409
|
+
return ranges, f"{name}-partial" if broken else name
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "code-puppy-core-plugins"
|
|
7
|
-
version = "0.0.
|
|
7
|
+
version = "0.0.73"
|
|
8
8
|
description = "Official plugin bundle for Code Puppy"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.11,<3.15"
|
|
@@ -15,10 +15,20 @@ dependencies = [
|
|
|
15
15
|
# smart_grep syntax-aware chunking. <0.26: py-tree-sitter 0.26.0
|
|
16
16
|
# segfaults walking ordinary trees (see jev_grep/treesitter.py).
|
|
17
17
|
"tree-sitter>=0.25.2,<0.26",
|
|
18
|
+
"tree-sitter-bash>=0.25.1",
|
|
19
|
+
"tree-sitter-c>=0.24.2",
|
|
20
|
+
"tree-sitter-c-sharp>=0.23.5",
|
|
21
|
+
"tree-sitter-cpp>=0.23.4",
|
|
18
22
|
"tree-sitter-go>=0.25.0",
|
|
19
23
|
"tree-sitter-java>=0.23.5",
|
|
20
24
|
"tree-sitter-javascript>=0.25.0",
|
|
25
|
+
"tree-sitter-kotlin>=1.1.0",
|
|
26
|
+
"tree-sitter-lua>=0.5.0",
|
|
27
|
+
"tree-sitter-php>=0.24.1",
|
|
28
|
+
"tree-sitter-ruby>=0.23.1",
|
|
21
29
|
"tree-sitter-rust>=0.24.2",
|
|
30
|
+
"tree-sitter-scala>=0.26.2",
|
|
31
|
+
"tree-sitter-swift>=0.7.3",
|
|
22
32
|
"tree-sitter-typescript>=0.23.2",
|
|
23
33
|
]
|
|
24
34
|
license = {text = "MIT"}
|