code-puppy-core-plugins 0.0.72__tar.gz → 0.0.74__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.74}/PKG-INFO +11 -1
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/jev_grep/chunks.py +7 -5
- code_puppy_core_plugins-0.0.74/code_puppy_core_plugins/jev_grep/completer.py +40 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/jev_grep/config.py +7 -2
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/jev_grep/register_callbacks.py +2 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/jev_grep/structure.py +15 -2
- code_puppy_core_plugins-0.0.74/code_puppy_core_plugins/jev_grep/treesitter.py +409 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/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.74}/.gitignore +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/LICENSE +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/README.md +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/THIRD_PARTY_NOTICES.md +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/acp/README.md +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/acp/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/acp/agent.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/acp/bridge.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/acp/capabilities.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/acp/commands.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/acp/content.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/acp/io_delegation.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/acp/mcp_config.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/acp/permissions.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/acp/persistence.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/acp/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/acp/replay.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/acp/session.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/acp/session_config.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/acp/state.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/agent_creator_skill/SKILL.md +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/agent_creator_skill/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/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.74}/code_puppy_core_plugins/agent_skills/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/agent_skills/config.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/agent_skills/discovery.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/agent_skills/enabled_skills.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/agent_skills/metadata.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/agent_skills/prompt_builder.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/agent_skills/provider.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/agent_skills/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/agent_skills/skill_commands.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/agent_skills/skills_menu.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/attachment_references/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/attachment_references/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/attachment_references/tool.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/auto_continue/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/auto_continue/classifier.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/auto_continue/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/aws_bedrock/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/aws_bedrock/config.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/aws_bedrock/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/aws_bedrock/utils.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/azure_foundry/README.md +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/azure_foundry/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/azure_foundry/config.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/azure_foundry/discovery.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/azure_foundry/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/azure_foundry/token.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/azure_foundry/utils.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/background_agents/README.md +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/background_agents/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/background_agents/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/btw/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/btw/inline_view.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/btw/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/btw/side_query.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/chatgpt_oauth/IMAGEGEN_SKILL.md +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/chatgpt_oauth/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/chatgpt_oauth/config.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/chatgpt_oauth/image_generation.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/chatgpt_oauth/image_tool.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/chatgpt_oauth/model_catalog.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/chatgpt_oauth/oauth_flow.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/chatgpt_oauth/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/chatgpt_oauth/test_plugin.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/chatgpt_oauth/usage.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/chatgpt_oauth/utils.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/claude_code_hooks/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/claude_code_hooks/config.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/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.74}/code_puppy_core_plugins/claude_code_hooks/trust.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/claude_code_oauth/README.md +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/claude_code_oauth/SETUP.md +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/claude_code_oauth/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/claude_code_oauth/config.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/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.74}/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.74}/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.74}/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.74}/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.74}/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.74}/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.74}/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.74}/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.74}/code_puppy_core_plugins/claude_code_oauth/utils.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/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.74}/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.74}/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.74}/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.74}/code_puppy_core_plugins/code_puppy_agent/SKILL.md +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/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.74}/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.74}/code_puppy_core_plugins/code_puppy_agent/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/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.74}/code_puppy_core_plugins/completion_notification/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/completion_notification/config.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/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.74}/code_puppy_core_plugins/completion_notification/locales/es.json +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/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.74}/code_puppy_core_plugins/completion_notification/notifier.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/completion_notification/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/computer_use/NativeCapture.swift +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/computer_use/README.md +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/computer_use/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/computer_use/accessibility.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/computer_use/activation.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/computer_use/backend.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/computer_use/backend_types.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/computer_use/capture.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/computer_use/commands.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/computer_use/geometry.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/computer_use/inline_image.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/computer_use/keycodes.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/computer_use/policy.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/computer_use/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/computer_use/safety.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/computer_use/settle.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/computer_use/state.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/computer_use/tools.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/context_indicator/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/context_indicator/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/context_indicator/usage.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/copilot_auth/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/copilot_auth/config.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/copilot_auth/reasoning_client.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/copilot_auth/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/copilot_auth/responses_stream.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/copilot_auth/utils.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/customizable_commands/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/customizable_commands/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/dbos_durable_exec/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/dbos_durable_exec/cancel.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/dbos_durable_exec/commands.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/dbos_durable_exec/config.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/dbos_durable_exec/lifecycle.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/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.74}/code_puppy_core_plugins/dbos_durable_exec/runtime.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/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.74}/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.74}/code_puppy_core_plugins/dbos_durable_exec/wrapper.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/destructive_command_guard/AGENTS.md +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/destructive_command_guard/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/destructive_command_guard/detector.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/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.74}/code_puppy_core_plugins/emoji_filter/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/emoji_filter/config.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/emoji_filter/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/emoji_filter/stripper.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/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.74}/code_puppy_core_plugins/example_custom_command/README.md +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/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.74}/code_puppy_core_plugins/file_permission_handler/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/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.74}/code_puppy_core_plugins/flux_bootstrap/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/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.74}/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.74}/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.74}/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.74}/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.74}/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.74}/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.74}/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.74}/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.74}/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.74}/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.74}/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.74}/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.74}/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.74}/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.74}/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.74}/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.74}/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.74}/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.74}/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.74}/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.74}/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.74}/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.74}/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.74}/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.74}/code_puppy_core_plugins/flux_bootstrap/installer.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/flux_bootstrap/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/force_push_guard/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/force_push_guard/detector.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/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.74}/code_puppy_core_plugins/fork/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/fork/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/frontend_emitter/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/frontend_emitter/emitter.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/frontend_emitter/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/frontend_emitter/session_context.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/grok_oauth/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/grok_oauth/config.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/grok_oauth/oauth_flow.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/grok_oauth/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/grok_oauth/utils.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/herdr/README.md +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/herdr/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/herdr/client.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/herdr/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/herdr/reporter.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/herdr/restore.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/herdr/smoke.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/herdr/sources.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/hook_creator/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/hook_creator/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/hook_manager/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/hook_manager/config.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/hook_manager/hooks_menu.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/hook_manager/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/hook_manager/trust_handler.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/jev_grep/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/jev_grep/judge.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/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.74}/code_puppy_core_plugins/jev_grep/retrieve.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/jev_grep/search.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/jev_grep/tool.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/logfire_oauth/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/logfire_oauth/oauth.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/logfire_oauth/query_tool.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/logfire_oauth/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/logfire_sessions/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/logfire_sessions/mirror.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/logfire_sessions/query.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/logfire_sessions/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/logfire_sessions/sync.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/mcp_binding_prompt/README.md +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/mcp_binding_prompt/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/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.74}/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.74}/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.74}/code_puppy_core_plugins/meta_oauth/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/meta_oauth/config.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/meta_oauth/oauth_flow.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/meta_oauth/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/meta_oauth/utils.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/namespace_skill_search/README.md +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/namespace_skill_search/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/namespace_skill_search/namespaces.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/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.74}/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.74}/code_puppy_core_plugins/no_tools/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/no_tools/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/oauth_pasteback.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/oauth_puppy_html.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/obsidian_agent/README.md +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/obsidian_agent/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/obsidian_agent/agent_obsidian.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/obsidian_agent/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/ollama/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/ollama/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/ollama_setup/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/ollama_setup/completer.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/ollama_setup/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/openrouter_oauth/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/openrouter_oauth/config.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/openrouter_oauth/oauth_flow.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/openrouter_oauth/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/openrouter_oauth/test_plugin.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/plugin_list/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/plugin_list/plugin_contributions.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/plugin_list/plugin_meta.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/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.74}/code_puppy_core_plugins/plugin_list/plugins_menu.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/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.74}/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.74}/code_puppy_core_plugins/plugin_list/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/pop_command/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/pop_command/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/profiles/README.md +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/profiles/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/profiles/config.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/profiles/locales/en-US.json +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/profiles/menu.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/profiles/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/prompt_newline/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/prompt_newline/config.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/prompt_newline/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/prune/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/prune/prune_menu.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/prune/prune_model.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/prune/prune_render.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/prune/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/puppy_kennel/README.md +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/puppy_kennel/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/puppy_kennel/commands.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/puppy_kennel/config.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/puppy_kennel/kennel.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/puppy_kennel/packer.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/puppy_kennel/recorder.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/puppy_kennel/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/puppy_kennel/retriever.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/puppy_kennel/schema.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/puppy_kennel/state.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/puppy_kennel/tools.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/puppy_kennel/wings.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/puppy_spinner/README.md +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/puppy_spinner/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/puppy_spinner/builtin_frames.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/puppy_spinner/commands.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/puppy_spinner/picker.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/puppy_spinner/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/puppy_spinner/spinners.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/qa_kitten_skill/SKILL.md +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/qa_kitten_skill/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/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.74}/code_puppy_core_plugins/quick_resume/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/quick_resume/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/review_pr/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/review_pr/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/session_namer/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/session_namer/namer.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/session_namer/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/spill/LICENSE.deepseek +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/spill/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/spill/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/spill/store.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/stack_dump/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/stack_dump/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/statusline/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/statusline/config.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/statusline/payload.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/statusline/prompt_patch.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/statusline/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/statusline/runner.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/statusline/statusline_command.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/steer_queue/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/steer_queue/queue_menu.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/steer_queue/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/subagent_panel/README.md +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/subagent_panel/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/subagent_panel/coalesce_patch.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/subagent_panel/panel_render.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/subagent_panel/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/subagent_panel/resume_repaint.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/subagent_panel/state.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/switch_agent_resume/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/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.74}/code_puppy_core_plugins/termflow_tui.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/theme/README.md +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/theme/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/theme/bundled_palettes.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/theme/content_styles.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/theme/osc_palette.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/theme/picker.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/theme/prompt_toolkit_theme.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/theme/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/theme/rich_themes.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/theme/themes.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/timestamp_heartbeat/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/timestamp_heartbeat/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/token_ratio_learner/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/token_ratio_learner/ratios.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/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.74}/code_puppy_core_plugins/universal_constructor/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/universal_constructor/models.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/universal_constructor/provider.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/universal_constructor/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/universal_constructor/registry.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/universal_constructor/sandbox.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/web_retriever_skill/SKILL.md +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/web_retriever_skill/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/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.74}/code_puppy_core_plugins/wiggum/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/wiggum/goal_runs.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/wiggum/judge.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/wiggum/judge_config.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/wiggum/judges_menu.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/wiggum/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/wiggum/state.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/code_puppy_core_plugins/yolo_cli/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.72 → code_puppy_core_plugins-0.0.74}/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.74
|
|
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)
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"""Tab-completion for smart_grep's ``/set`` keys.
|
|
2
|
+
|
|
3
|
+
Core's ``/set`` completer only knows its built-in keys plus whatever is
|
|
4
|
+
already saved in puppy.cfg, so ``smart_grep`` was invisible until typed blind.
|
|
5
|
+
This fills that gap and steps aside once a key is saved: core lists it from
|
|
6
|
+
then on, and yielding it here too would show it twice.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
from typing import Iterable
|
|
12
|
+
|
|
13
|
+
from termflow.tui.completion import Completer, Completion, Document
|
|
14
|
+
|
|
15
|
+
from code_puppy.config import get_config_keys
|
|
16
|
+
|
|
17
|
+
from .config import SETTING_KEYS
|
|
18
|
+
|
|
19
|
+
TRIGGER = "/set "
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class SmartGrepSetCompleter(Completer):
|
|
23
|
+
"""Completes unsaved smart_grep keys after ``/set ``."""
|
|
24
|
+
|
|
25
|
+
def get_completions(
|
|
26
|
+
self, document: Document, complete_event: object
|
|
27
|
+
) -> Iterable[Completion]:
|
|
28
|
+
text = document.text_before_cursor.lstrip()
|
|
29
|
+
if not text.startswith(TRIGGER):
|
|
30
|
+
return
|
|
31
|
+
partial = text[len(TRIGGER) :].lstrip()
|
|
32
|
+
candidates = [key for key in SETTING_KEYS if key.startswith(partial)]
|
|
33
|
+
if not candidates:
|
|
34
|
+
return # don't touch puppy.cfg for every unrelated `/set` keystroke
|
|
35
|
+
saved = set(get_config_keys())
|
|
36
|
+
for key in candidates:
|
|
37
|
+
if key in saved:
|
|
38
|
+
continue
|
|
39
|
+
# Same "key = " shape core's SetCompleter emits for unset keys.
|
|
40
|
+
yield Completion(f"{key} = ", start_position=-len(partial))
|
|
@@ -13,6 +13,11 @@ import os
|
|
|
13
13
|
from code_puppy.config import get_api_key, get_truthy_bool_value, get_value
|
|
14
14
|
|
|
15
15
|
ENABLED_KEY = "smart_grep"
|
|
16
|
+
MODEL_KEY = "smart_grep_model"
|
|
17
|
+
THRESHOLD_KEY = "smart_grep_threshold"
|
|
18
|
+
# What `/set` autocompletes. The API key is deliberately absent: completions
|
|
19
|
+
# echo the current value, and secrets don't belong in a popup.
|
|
20
|
+
SETTING_KEYS = (ENABLED_KEY, MODEL_KEY, THRESHOLD_KEY)
|
|
16
21
|
# TypeSafe's official name first, then the Jev-branded alias. Config lookup
|
|
17
22
|
# is case-insensitive, so `/set jev_api_key ...` matches JEV_API_KEY.
|
|
18
23
|
API_KEY_NAMES = ("TYPESAFE_API_KEY", "JEV_API_KEY")
|
|
@@ -44,12 +49,12 @@ def is_available() -> bool:
|
|
|
44
49
|
|
|
45
50
|
def get_jev_model_name() -> str:
|
|
46
51
|
"""Pin a version (e.g. ``jev-1.13.0``) once a threshold is tuned against it."""
|
|
47
|
-
return get_value(
|
|
52
|
+
return get_value(MODEL_KEY) or DEFAULT_MODEL
|
|
48
53
|
|
|
49
54
|
|
|
50
55
|
def get_threshold() -> float:
|
|
51
56
|
try:
|
|
52
|
-
value = float(get_value(
|
|
57
|
+
value = float(get_value(THRESHOLD_KEY) or DEFAULT_THRESHOLD)
|
|
53
58
|
except ValueError:
|
|
54
59
|
return DEFAULT_THRESHOLD
|
|
55
60
|
return value if 0 <= value <= 1 else DEFAULT_THRESHOLD
|
|
@@ -8,6 +8,7 @@ key is configured. ``/set`` reloads the agent, so toggling applies at once.
|
|
|
8
8
|
|
|
9
9
|
from code_puppy.callbacks import register_callback
|
|
10
10
|
|
|
11
|
+
from .completer import SmartGrepSetCompleter
|
|
11
12
|
from .config import is_available
|
|
12
13
|
from .tool import TOOL_NAME, register_smart_grep
|
|
13
14
|
|
|
@@ -52,3 +53,4 @@ and the query to TypeSafe, so use local grep/reads for local-only work.
|
|
|
52
53
|
register_callback("load_prompt", _discovery_instructions)
|
|
53
54
|
register_callback("register_tools", _register_tools)
|
|
54
55
|
register_callback("register_agent_tools", _advertise_when_configured)
|
|
56
|
+
register_callback("register_completion_provider", SmartGrepSetCompleter)
|
|
@@ -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.74"
|
|
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"}
|