code-puppy-core-plugins 0.0.66__tar.gz → 0.0.67__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.66 → code_puppy_core_plugins-0.0.67}/PKG-INFO +2 -2
- code_puppy_core_plugins-0.0.67/code_puppy_core_plugins/jev_grep/__init__.py +1 -0
- code_puppy_core_plugins-0.0.67/code_puppy_core_plugins/jev_grep/chunks.py +271 -0
- code_puppy_core_plugins-0.0.67/code_puppy_core_plugins/jev_grep/config.py +38 -0
- code_puppy_core_plugins-0.0.67/code_puppy_core_plugins/jev_grep/judge.py +102 -0
- code_puppy_core_plugins-0.0.67/code_puppy_core_plugins/jev_grep/locales/en-US.json +3 -0
- code_puppy_core_plugins-0.0.67/code_puppy_core_plugins/jev_grep/register_callbacks.py +25 -0
- code_puppy_core_plugins-0.0.67/code_puppy_core_plugins/jev_grep/retrieve.py +90 -0
- code_puppy_core_plugins-0.0.67/code_puppy_core_plugins/jev_grep/search.py +186 -0
- code_puppy_core_plugins-0.0.67/code_puppy_core_plugins/jev_grep/tool.py +109 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/pyproject.toml +3 -2
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/.gitignore +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/LICENSE +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/README.md +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/acp/README.md +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/acp/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/acp/agent.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/acp/bridge.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/acp/capabilities.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/acp/commands.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/acp/content.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/acp/io_delegation.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/acp/mcp_config.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/acp/permissions.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/acp/persistence.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/acp/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/acp/replay.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/acp/session.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/acp/session_config.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/acp/state.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/agent_creator_skill/SKILL.md +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/agent_creator_skill/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/agent_creator_skill/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/agent_skills/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/agent_skills/config.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/agent_skills/discovery.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/agent_skills/enabled_skills.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/agent_skills/metadata.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/agent_skills/prompt_builder.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/agent_skills/provider.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/agent_skills/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/agent_skills/skill_commands.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/agent_skills/skills_menu.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/auto_continue/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/auto_continue/classifier.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/auto_continue/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/aws_bedrock/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/aws_bedrock/config.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/aws_bedrock/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/aws_bedrock/utils.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/azure_foundry/README.md +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/azure_foundry/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/azure_foundry/config.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/azure_foundry/discovery.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/azure_foundry/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/azure_foundry/token.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/azure_foundry/utils.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/background_agents/README.md +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/background_agents/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/background_agents/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/btw/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/btw/inline_view.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/btw/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/btw/side_query.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/chatgpt_oauth/IMAGEGEN_SKILL.md +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/chatgpt_oauth/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/chatgpt_oauth/config.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/chatgpt_oauth/image_generation.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/chatgpt_oauth/image_tool.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/chatgpt_oauth/model_catalog.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/chatgpt_oauth/oauth_flow.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/chatgpt_oauth/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/chatgpt_oauth/test_plugin.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/chatgpt_oauth/usage.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/chatgpt_oauth/utils.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/claude_code_hooks/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/claude_code_hooks/config.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/claude_code_hooks/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/claude_code_hooks/trust.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/claude_code_oauth/README.md +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/claude_code_oauth/SETUP.md +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/claude_code_oauth/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/claude_code_oauth/config.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/claude_code_oauth/fast_mode.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/claude_code_oauth/model_filter.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/claude_code_oauth/model_provider.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/claude_code_oauth/prompt_handler.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/claude_code_oauth/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/claude_code_oauth/runtime_credentials.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/claude_code_oauth/test_plugin.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/claude_code_oauth/token_refresh_heartbeat.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/claude_code_oauth/token_store.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/claude_code_oauth/utils.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/code_puppy_agent/AGENTS_AND_TOOLS.md +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/code_puppy_agent/MODELS_AND_MCP.md +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/code_puppy_agent/PLUGINS_AND_CALLBACKS.md +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/code_puppy_agent/SESSIONS_AND_HISTORY.md +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/code_puppy_agent/SKILL.md +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/code_puppy_agent/SKILLS_SYSTEM.md +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/code_puppy_agent/SYSTEM_PROMPT_CONFIG_AND_I18N.md +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/code_puppy_agent/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/code_puppy_agent/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/completion_notification/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/completion_notification/config.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/completion_notification/locales/en-US.json +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/completion_notification/locales/es.json +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/completion_notification/locales/fr-CA.json +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/completion_notification/notifier.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/completion_notification/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/computer_use/NativeCapture.swift +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/computer_use/README.md +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/computer_use/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/computer_use/accessibility.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/computer_use/activation.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/computer_use/backend.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/computer_use/backend_types.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/computer_use/capture.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/computer_use/commands.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/computer_use/geometry.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/computer_use/inline_image.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/computer_use/keycodes.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/computer_use/policy.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/computer_use/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/computer_use/safety.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/computer_use/settle.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/computer_use/state.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/computer_use/tools.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/context_indicator/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/context_indicator/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/context_indicator/usage.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/copilot_auth/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/copilot_auth/config.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/copilot_auth/reasoning_client.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/copilot_auth/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/copilot_auth/responses_stream.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/copilot_auth/utils.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/customizable_commands/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/customizable_commands/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/dbos_durable_exec/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/dbos_durable_exec/cancel.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/dbos_durable_exec/commands.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/dbos_durable_exec/config.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/dbos_durable_exec/lifecycle.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/dbos_durable_exec/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/dbos_durable_exec/runtime.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/dbos_durable_exec/startup_lock.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/dbos_durable_exec/workflow_ids.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/dbos_durable_exec/wrapper.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/destructive_command_guard/AGENTS.md +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/destructive_command_guard/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/destructive_command_guard/detector.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/destructive_command_guard/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/emoji_filter/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/emoji_filter/config.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/emoji_filter/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/emoji_filter/stripper.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/empty_html_comment_filter/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/example_custom_command/README.md +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/example_custom_command/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/file_permission_handler/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/file_permission_handler/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/flux_bootstrap/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/_docs/README.md +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/_docs/cheatsheet.md +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/_docs/pipeline.md +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/_docs/synopsis.md +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/about.md +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/address-feedback.md +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/ask.md +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/aug.md +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/auto-pilot.md +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/cheatsheet.md +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/commit.md +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/config.md +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/create-pr.md +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/exec.md +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/new.md +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/qa.md +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/rebase.md +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/review.md +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/split.md +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/squash-commits.md +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/status.md +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/flux_bootstrap/bundled/commands/flux/tests.md +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/flux_bootstrap/bundled/scripts/flux_about.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/flux_bootstrap/bundled/scripts/flux_cheatsheet.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/flux_bootstrap/bundled/scripts/flux_status.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/flux_bootstrap/installer.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/flux_bootstrap/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/force_push_guard/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/force_push_guard/detector.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/force_push_guard/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/fork/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/fork/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/frontend_emitter/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/frontend_emitter/emitter.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/frontend_emitter/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/frontend_emitter/session_context.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/grok_oauth/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/grok_oauth/config.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/grok_oauth/oauth_flow.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/grok_oauth/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/grok_oauth/utils.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/herdr/README.md +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/herdr/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/herdr/client.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/herdr/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/herdr/reporter.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/herdr/restore.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/herdr/smoke.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/herdr/sources.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/hook_creator/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/hook_creator/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/hook_manager/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/hook_manager/config.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/hook_manager/hooks_menu.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/hook_manager/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/hook_manager/trust_handler.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/logfire_oauth/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/logfire_oauth/oauth.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/logfire_oauth/query_tool.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/logfire_oauth/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/logfire_sessions/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/logfire_sessions/mirror.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/logfire_sessions/query.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/logfire_sessions/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/logfire_sessions/sync.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/mcp_binding_prompt/README.md +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/mcp_binding_prompt/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/mcp_binding_prompt/custom_install.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/mcp_binding_prompt/http_form.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/mcp_binding_prompt/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/meta_oauth/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/meta_oauth/config.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/meta_oauth/oauth_flow.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/meta_oauth/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/meta_oauth/utils.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/namespace_skill_search/README.md +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/namespace_skill_search/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/namespace_skill_search/namespaces.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/namespace_skill_search/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/namespace_skill_search/search_tool.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/no_tools/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/no_tools/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/oauth_pasteback.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/oauth_puppy_html.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/obsidian_agent/README.md +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/obsidian_agent/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/obsidian_agent/agent_obsidian.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/obsidian_agent/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/ollama/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/ollama/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/ollama_setup/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/ollama_setup/completer.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/ollama_setup/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/openrouter_oauth/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/openrouter_oauth/config.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/openrouter_oauth/oauth_flow.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/openrouter_oauth/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/openrouter_oauth/test_plugin.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/plugin_list/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/plugin_list/plugin_contributions.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/plugin_list/plugin_meta.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/plugin_list/plugin_text_utils.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/plugin_list/plugins_menu.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/plugin_list/plugins_menu_render.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/plugin_list/project_trust_flow.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/plugin_list/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/pop_command/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/pop_command/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/profiles/README.md +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/profiles/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/profiles/config.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/profiles/locales/en-US.json +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/profiles/menu.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/profiles/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/prompt_newline/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/prompt_newline/config.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/prompt_newline/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/prune/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/prune/prune_menu.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/prune/prune_model.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/prune/prune_render.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/prune/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/puppy_kennel/README.md +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/puppy_kennel/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/puppy_kennel/commands.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/puppy_kennel/config.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/puppy_kennel/kennel.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/puppy_kennel/packer.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/puppy_kennel/recorder.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/puppy_kennel/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/puppy_kennel/retriever.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/puppy_kennel/schema.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/puppy_kennel/state.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/puppy_kennel/tools.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/puppy_kennel/wings.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/puppy_spinner/README.md +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/puppy_spinner/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/puppy_spinner/builtin_frames.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/puppy_spinner/commands.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/puppy_spinner/picker.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/puppy_spinner/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/puppy_spinner/spinners.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/qa_kitten_skill/SKILL.md +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/qa_kitten_skill/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/qa_kitten_skill/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/quick_resume/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/quick_resume/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/review_pr/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/review_pr/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/session_namer/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/session_namer/namer.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/session_namer/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/spill/LICENSE.deepseek +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/spill/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/spill/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/spill/store.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/stack_dump/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/stack_dump/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/statusline/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/statusline/config.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/statusline/payload.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/statusline/prompt_patch.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/statusline/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/statusline/runner.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/statusline/statusline_command.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/steer_queue/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/steer_queue/queue_menu.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/steer_queue/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/subagent_panel/README.md +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/subagent_panel/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/subagent_panel/coalesce_patch.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/subagent_panel/panel_render.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/subagent_panel/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/subagent_panel/resume_repaint.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/subagent_panel/state.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/switch_agent_resume/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/switch_agent_resume/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/termflow_tui.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/theme/README.md +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/theme/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/theme/bundled_palettes.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/theme/content_styles.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/theme/osc_palette.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/theme/picker.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/theme/prompt_toolkit_theme.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/theme/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/theme/rich_themes.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/theme/themes.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/timestamp_heartbeat/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/timestamp_heartbeat/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/token_ratio_learner/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/token_ratio_learner/ratios.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/token_ratio_learner/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/universal_constructor/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/universal_constructor/models.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/universal_constructor/provider.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/universal_constructor/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/universal_constructor/registry.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/universal_constructor/sandbox.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/web_retriever_skill/SKILL.md +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/web_retriever_skill/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/web_retriever_skill/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/wiggum/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/wiggum/goal_runs.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/wiggum/judge.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/wiggum/judge_config.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/wiggum/judges_menu.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/wiggum/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/wiggum/state.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/yolo_cli/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.66 → code_puppy_core_plugins-0.0.67}/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.67
|
|
4
4
|
Summary: Official plugin bundle for Code Puppy
|
|
5
5
|
Project-URL: Repository, https://github.com/mpfaffenberger/code_puppy_core_plugins
|
|
6
6
|
Project-URL: Homepage, https://github.com/mpfaffenberger/code_puppy_core_plugins
|
|
@@ -15,7 +15,7 @@ Classifier: Programming Language :: Python :: 3.12
|
|
|
15
15
|
Classifier: Programming Language :: Python :: 3.13
|
|
16
16
|
Requires-Python: <3.15,>=3.11
|
|
17
17
|
Requires-Dist: httpx<1,>=0.24.1
|
|
18
|
-
Requires-Dist: pydantic-ai-slim[anthropic,mcp,openai]<3,>=2.
|
|
18
|
+
Requires-Dist: pydantic-ai-slim[anthropic,mcp,openai,typesafe]<3,>=2.51.0
|
|
19
19
|
Description-Content-Type: text/markdown
|
|
20
20
|
|
|
21
21
|
# Code Puppy Core Plugins
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""Semantic code search powered by TypeSafe's Jev decision model."""
|
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
"""Discovery and chunking: turn a directory into judgeable source snippets.
|
|
2
|
+
|
|
3
|
+
A port of jevgrep's client-side chunker. Python files are split along the
|
|
4
|
+
AST (functions and methods stay whole; declarations longer than
|
|
5
|
+
``SPLIT_LINES`` are split into the blocks inside them so each snippet is one
|
|
6
|
+
behaviour). Every other file falls back to overlapping line windows. Line
|
|
7
|
+
coverage is exact: every non-blank line lands in at least one snippet.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from __future__ import annotations
|
|
11
|
+
|
|
12
|
+
import ast
|
|
13
|
+
import os
|
|
14
|
+
import subprocess
|
|
15
|
+
from collections import Counter
|
|
16
|
+
from dataclasses import dataclass, field
|
|
17
|
+
|
|
18
|
+
from code_puppy.tools.ripgrep import find_ripgrep
|
|
19
|
+
|
|
20
|
+
MAX_FILES = 20_000
|
|
21
|
+
MAX_CHUNKS = 20_000
|
|
22
|
+
MAX_FILE_BYTES = 1024 * 1024
|
|
23
|
+
MAX_TOTAL_BYTES = 32 * 1024 * 1024
|
|
24
|
+
MAX_CHUNK_CHARS = 12_000
|
|
25
|
+
WHOLE_DECLARATION_LINES = 160
|
|
26
|
+
SPLIT_LINES = 24
|
|
27
|
+
WINDOW, OVERLAP = 60, 10
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class LineTooLong(ValueError):
|
|
31
|
+
"""A single line is too long to judge (minified or generated source)."""
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
@dataclass(frozen=True)
|
|
35
|
+
class Chunk:
|
|
36
|
+
path: str
|
|
37
|
+
line: int
|
|
38
|
+
end_line: int
|
|
39
|
+
text: str
|
|
40
|
+
symbol: str | None = None
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
@dataclass
|
|
44
|
+
class Discovery:
|
|
45
|
+
chunks: list[Chunk] = field(default_factory=list)
|
|
46
|
+
files: int = 0
|
|
47
|
+
skipped: list[tuple[str, str]] = field(default_factory=list)
|
|
48
|
+
parsers: Counter = field(default_factory=Counter)
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
@dataclass
|
|
52
|
+
class _Range:
|
|
53
|
+
start: int
|
|
54
|
+
end: int
|
|
55
|
+
symbol: str | None
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
def windows(
|
|
59
|
+
lines: list[str],
|
|
60
|
+
path: str,
|
|
61
|
+
first_line: int = 1,
|
|
62
|
+
size: int = WINDOW,
|
|
63
|
+
overlap: int = OVERLAP,
|
|
64
|
+
symbol: str | None = None,
|
|
65
|
+
) -> list[Chunk]:
|
|
66
|
+
"""Fixed-size line windows; giant windows are halved, never clipped."""
|
|
67
|
+
out: list[Chunk] = []
|
|
68
|
+
step = size - overlap
|
|
69
|
+
for i in range(0, max(len(lines), 1), step):
|
|
70
|
+
part = lines[i : i + size]
|
|
71
|
+
text = "\n".join(part)
|
|
72
|
+
if len(text) > MAX_CHUNK_CHARS:
|
|
73
|
+
if size == 1:
|
|
74
|
+
raise LineTooLong(
|
|
75
|
+
f"line exceeds {MAX_CHUNK_CHARS} characters: {path}:{first_line + i}"
|
|
76
|
+
)
|
|
77
|
+
out.extend(
|
|
78
|
+
windows(part, path, first_line + i, max(1, size // 2), 0, symbol)
|
|
79
|
+
)
|
|
80
|
+
elif text.strip():
|
|
81
|
+
out.append(
|
|
82
|
+
Chunk(
|
|
83
|
+
path, first_line + i, first_line + i + len(part) - 1, text, symbol
|
|
84
|
+
)
|
|
85
|
+
)
|
|
86
|
+
if i + size >= len(lines):
|
|
87
|
+
break
|
|
88
|
+
return out
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
def _begin(node: ast.AST) -> int:
|
|
92
|
+
decorators = getattr(node, "decorator_list", [])
|
|
93
|
+
return min([node.lineno, *(d.lineno for d in decorators)])
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
def _partition(node: ast.AST, start: int, end: int, symbol, depth: int = 0):
|
|
97
|
+
"""Split a long body into its blocks, covering every line of [start, end]."""
|
|
98
|
+
body = getattr(node, "body", None)
|
|
99
|
+
if not isinstance(body, list) or end - start < SPLIT_LINES:
|
|
100
|
+
return None
|
|
101
|
+
stmts = [s for s in body if hasattr(s, "end_lineno")]
|
|
102
|
+
if not stmts:
|
|
103
|
+
return None
|
|
104
|
+
if len(stmts) == 1:
|
|
105
|
+
return (
|
|
106
|
+
_partition(stmts[0], start, end, symbol, depth + 1) if depth < 3 else None
|
|
107
|
+
)
|
|
108
|
+
|
|
109
|
+
out: list[_Range] = []
|
|
110
|
+
cursor = start
|
|
111
|
+
group: list[ast.stmt] = []
|
|
112
|
+
|
|
113
|
+
def flush(last: bool) -> None:
|
|
114
|
+
nonlocal cursor
|
|
115
|
+
if not group:
|
|
116
|
+
return
|
|
117
|
+
stop = end if last else min(end, group[-1].end_lineno)
|
|
118
|
+
if stop >= cursor:
|
|
119
|
+
inner = None
|
|
120
|
+
if len(group) == 1 and depth < 3:
|
|
121
|
+
inner = _partition(group[0], cursor, stop, symbol, depth + 1)
|
|
122
|
+
out.extend(inner or [_Range(cursor, stop, symbol)])
|
|
123
|
+
cursor = stop + 1
|
|
124
|
+
group.clear()
|
|
125
|
+
|
|
126
|
+
for stmt in stmts:
|
|
127
|
+
span = stmt.end_lineno - _begin(stmt) + 1
|
|
128
|
+
if group and (span >= 6 or stmt.end_lineno - cursor + 1 > 20):
|
|
129
|
+
flush(False)
|
|
130
|
+
group.append(stmt)
|
|
131
|
+
if span >= 6 and stmt is not stmts[-1]:
|
|
132
|
+
flush(False)
|
|
133
|
+
flush(True)
|
|
134
|
+
return out if len(out) > 1 else None
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
def _python_ranges(text: str) -> list[_Range]:
|
|
138
|
+
tree = ast.parse(text)
|
|
139
|
+
ranges: list[_Range] = []
|
|
140
|
+
|
|
141
|
+
def emit(node: ast.AST, start: int, symbol: str | None) -> None:
|
|
142
|
+
ranges.extend(
|
|
143
|
+
_partition(node, start, node.end_lineno, symbol)
|
|
144
|
+
or [_Range(start, node.end_lineno, symbol)]
|
|
145
|
+
)
|
|
146
|
+
|
|
147
|
+
for node in tree.body:
|
|
148
|
+
if isinstance(node, ast.ClassDef):
|
|
149
|
+
ranges.append(_Range(_begin(node), node.body[0].lineno - 1, node.name))
|
|
150
|
+
for member in node.body:
|
|
151
|
+
name = getattr(member, "name", "body")
|
|
152
|
+
emit(member, _begin(member), f"{node.name}.{name}")
|
|
153
|
+
else:
|
|
154
|
+
emit(node, _begin(node), getattr(node, "name", None))
|
|
155
|
+
return _merge_short_neighbours(ranges)
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
def _merge_short_neighbours(ranges: list[_Range]) -> list[_Range]:
|
|
159
|
+
"""Fold runs of imports/one-liners into one target (each costs a judgment)."""
|
|
160
|
+
|
|
161
|
+
def mergeable(r: _Range) -> bool:
|
|
162
|
+
return r.end - r.start <= 1 and "." not in (r.symbol or "")
|
|
163
|
+
|
|
164
|
+
merged: list[_Range] = []
|
|
165
|
+
for r in ranges:
|
|
166
|
+
last = merged[-1] if merged else None
|
|
167
|
+
if (
|
|
168
|
+
last
|
|
169
|
+
and mergeable(last)
|
|
170
|
+
and mergeable(r)
|
|
171
|
+
and r.start <= last.end + 1
|
|
172
|
+
and r.end - last.start < 12
|
|
173
|
+
and len(f"{last.symbol} {r.symbol}") < 60
|
|
174
|
+
):
|
|
175
|
+
names = dict.fromkeys(s for s in (last.symbol, r.symbol) if s)
|
|
176
|
+
last.end, last.symbol = r.end, ", ".join(names) or None
|
|
177
|
+
else:
|
|
178
|
+
merged.append(_Range(r.start, r.end, r.symbol))
|
|
179
|
+
return merged
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
def _chunks_from_ranges(
|
|
183
|
+
lines: list[str], path: str, ranges: list[_Range]
|
|
184
|
+
) -> list[Chunk]:
|
|
185
|
+
out: list[Chunk] = []
|
|
186
|
+
next_line = 1
|
|
187
|
+
for r in ranges:
|
|
188
|
+
start, end = min(r.start, next_line), min(r.end, len(lines))
|
|
189
|
+
if end < start:
|
|
190
|
+
continue
|
|
191
|
+
part = lines[start - 1 : end]
|
|
192
|
+
whole = (
|
|
193
|
+
end - start < WHOLE_DECLARATION_LINES
|
|
194
|
+
and len("\n".join(part)) <= MAX_CHUNK_CHARS
|
|
195
|
+
)
|
|
196
|
+
size, overlap = (len(part), 0) if whole else (WINDOW, OVERLAP)
|
|
197
|
+
out.extend(windows(part, path, start, size, overlap, r.symbol))
|
|
198
|
+
next_line = end + 1
|
|
199
|
+
if next_line <= len(lines):
|
|
200
|
+
out.extend(windows(lines[next_line - 1 :], path, next_line))
|
|
201
|
+
return out
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
def source_chunks(text: str, path: str) -> tuple[list[Chunk], str]:
|
|
205
|
+
"""Chunk one file's text. Returns (chunks, parser_name)."""
|
|
206
|
+
lines = text.splitlines()
|
|
207
|
+
if path.endswith(".py"):
|
|
208
|
+
try:
|
|
209
|
+
ranges = _python_ranges(text)
|
|
210
|
+
except (SyntaxError, ValueError, RecursionError):
|
|
211
|
+
ranges = []
|
|
212
|
+
if ranges:
|
|
213
|
+
return _chunks_from_ranges(lines, path, ranges), "python"
|
|
214
|
+
return windows(lines, path), "overlapping-lines"
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
def list_files(directory: str, glob: str | None = None) -> list[str]:
|
|
218
|
+
"""Files ripgrep would search: honours .gitignore, skips hidden files."""
|
|
219
|
+
rg = find_ripgrep()
|
|
220
|
+
if rg is None:
|
|
221
|
+
raise RuntimeError("ripgrep (rg) is required for semantic_grep.")
|
|
222
|
+
args = [rg, "--files", "-0", *(["-g", glob] if glob else []), "--", directory]
|
|
223
|
+
proc = subprocess.run(args, capture_output=True, timeout=15, check=False)
|
|
224
|
+
if proc.returncode not in (0, 1): # 1 == no files
|
|
225
|
+
raise RuntimeError(
|
|
226
|
+
f"ripgrep discovery failed: {proc.stderr.decode(errors='replace')[:300]}"
|
|
227
|
+
)
|
|
228
|
+
files = sorted({f for f in proc.stdout.decode(errors="replace").split("\0") if f})
|
|
229
|
+
if len(files) > MAX_FILES:
|
|
230
|
+
raise RuntimeError(
|
|
231
|
+
f"Search exceeds {MAX_FILES} files. Narrow the directory or glob."
|
|
232
|
+
)
|
|
233
|
+
return files
|
|
234
|
+
|
|
235
|
+
|
|
236
|
+
def discover(directory: str, glob: str | None = None) -> Discovery:
|
|
237
|
+
"""Read and chunk every eligible file under ``directory``."""
|
|
238
|
+
found = Discovery()
|
|
239
|
+
files = list_files(directory, glob)
|
|
240
|
+
found.files = len(files)
|
|
241
|
+
total_bytes = 0
|
|
242
|
+
for path in files:
|
|
243
|
+
if os.path.getsize(path) > MAX_FILE_BYTES:
|
|
244
|
+
found.skipped.append((path, "larger than 1 MiB"))
|
|
245
|
+
continue
|
|
246
|
+
with open(path, "rb") as fh:
|
|
247
|
+
raw = fh.read()
|
|
248
|
+
total_bytes += len(raw)
|
|
249
|
+
if total_bytes > MAX_TOTAL_BYTES:
|
|
250
|
+
raise RuntimeError(
|
|
251
|
+
"Search exceeds 32 MiB of source. Narrow the directory or glob."
|
|
252
|
+
)
|
|
253
|
+
if b"\0" in raw:
|
|
254
|
+
found.skipped.append((path, "binary"))
|
|
255
|
+
continue
|
|
256
|
+
try:
|
|
257
|
+
text = raw.decode("utf-8")
|
|
258
|
+
chunks, parser = source_chunks(text, path)
|
|
259
|
+
except UnicodeDecodeError:
|
|
260
|
+
found.skipped.append((path, "not UTF-8"))
|
|
261
|
+
continue
|
|
262
|
+
except LineTooLong as exc:
|
|
263
|
+
found.skipped.append((path, str(exc)))
|
|
264
|
+
continue
|
|
265
|
+
found.parsers[parser] += 1
|
|
266
|
+
found.chunks.extend(chunks)
|
|
267
|
+
if len(found.chunks) > MAX_CHUNKS:
|
|
268
|
+
raise RuntimeError(
|
|
269
|
+
f"Search exceeds {MAX_CHUNKS} snippets. Narrow the directory or glob."
|
|
270
|
+
)
|
|
271
|
+
return found
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"""Settings for jev_grep. Set with `/set <key> <value>` or the environment."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import os
|
|
6
|
+
|
|
7
|
+
from code_puppy.config import get_api_key, get_value
|
|
8
|
+
|
|
9
|
+
# TypeSafe's official name first, then the Jev-branded alias. Config lookup
|
|
10
|
+
# is case-insensitive, so `/set jev_api_key ...` matches JEV_API_KEY.
|
|
11
|
+
API_KEY_NAMES = ("TYPESAFE_API_KEY", "JEV_API_KEY")
|
|
12
|
+
API_KEY_NAME = API_KEY_NAMES[0]
|
|
13
|
+
DEFAULT_MODEL = "jev-latest"
|
|
14
|
+
DEFAULT_THRESHOLD = 0.5
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def get_typesafe_api_key() -> str:
|
|
18
|
+
"""First key found: environment beats config, official name beats alias."""
|
|
19
|
+
for name in API_KEY_NAMES:
|
|
20
|
+
if key := os.environ.get(name):
|
|
21
|
+
return key
|
|
22
|
+
for name in API_KEY_NAMES:
|
|
23
|
+
if key := get_api_key(name):
|
|
24
|
+
return key
|
|
25
|
+
return ""
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def get_jev_model_name() -> str:
|
|
29
|
+
"""Pin a version (e.g. ``jev-1.13.0``) once a threshold is tuned against it."""
|
|
30
|
+
return get_value("jev_grep_model") or DEFAULT_MODEL
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def get_threshold() -> float:
|
|
34
|
+
try:
|
|
35
|
+
value = float(get_value("jev_grep_threshold") or DEFAULT_THRESHOLD)
|
|
36
|
+
except ValueError:
|
|
37
|
+
return DEFAULT_THRESHOLD
|
|
38
|
+
return value if 0 <= value <= 1 else DEFAULT_THRESHOLD
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
"""Relevance judgments from Jev, TypeSafe's decision model, via Pydantic AI.
|
|
2
|
+
|
|
3
|
+
This replaces jevgrep's hosted ``/api/v1/grep`` backend. jevgrep documents its
|
|
4
|
+
score as the product of two independent judgments -- the snippet acts on the
|
|
5
|
+
requested *entity*, and it performs the requested *operation* -- so that is
|
|
6
|
+
exactly what we ask. A bounded ``float`` field on a decision model is answered
|
|
7
|
+
with the raw probability of yes, so there is no confidence-margin math to undo.
|
|
8
|
+
|
|
9
|
+
Every snippet is judged in its own run (its own Jev state), so neighbouring
|
|
10
|
+
snippets never lend each other evidence.
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
from __future__ import annotations
|
|
14
|
+
|
|
15
|
+
import asyncio
|
|
16
|
+
from collections.abc import Sequence
|
|
17
|
+
|
|
18
|
+
from pydantic import BaseModel, Field
|
|
19
|
+
from pydantic_ai import Agent
|
|
20
|
+
from pydantic_ai.models import Model
|
|
21
|
+
|
|
22
|
+
from .chunks import Chunk
|
|
23
|
+
|
|
24
|
+
DEFAULT_CONCURRENCY = 8
|
|
25
|
+
REQUEST_TIMEOUT_SECONDS = 30
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class Relevance(BaseModel):
|
|
29
|
+
"""Decide whether this source code is what a developer searching the codebase wants to find."""
|
|
30
|
+
|
|
31
|
+
entity: float = Field(
|
|
32
|
+
ge=0,
|
|
33
|
+
le=1,
|
|
34
|
+
description=(
|
|
35
|
+
"Does this code act on the thing the search is about "
|
|
36
|
+
"(the data, object, resource or concept it names)?"
|
|
37
|
+
),
|
|
38
|
+
)
|
|
39
|
+
operation: float = Field(
|
|
40
|
+
ge=0,
|
|
41
|
+
le=1,
|
|
42
|
+
description=(
|
|
43
|
+
"Does this code itself perform the action or behaviour the search "
|
|
44
|
+
"describes, rather than only mentioning it, importing it, or calling "
|
|
45
|
+
"something with a similar name?"
|
|
46
|
+
),
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
@property
|
|
50
|
+
def score(self) -> float:
|
|
51
|
+
return self.entity * self.operation
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def build_jev_model(model_name: str, api_key: str) -> Model:
|
|
55
|
+
"""A TypeSafe Jev model. Imported lazily: the SDK is an optional extra."""
|
|
56
|
+
from pydantic_ai.models.typesafe import TypeSafeModel
|
|
57
|
+
from pydantic_ai.providers.typesafe import TypeSafeProvider
|
|
58
|
+
|
|
59
|
+
return TypeSafeModel(model_name, provider=TypeSafeProvider(api_key=api_key))
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
def _state(chunk: Chunk) -> str:
|
|
63
|
+
"""What Jev judges: where the snippet lives, then the snippet itself."""
|
|
64
|
+
where = f"{chunk.path}:{chunk.line}-{chunk.end_line}"
|
|
65
|
+
header = f"{where} ({chunk.symbol})" if chunk.symbol else where
|
|
66
|
+
return f"{header}\n\n{chunk.text}"
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
def build_agent(model: Model, query: str) -> Agent[None, Relevance]:
|
|
70
|
+
return Agent(
|
|
71
|
+
model,
|
|
72
|
+
output_type=Relevance,
|
|
73
|
+
instructions=(
|
|
74
|
+
"The text is a snippet of source code from a repository. "
|
|
75
|
+
f"A developer is searching the codebase for: {query}"
|
|
76
|
+
),
|
|
77
|
+
model_settings={"timeout": REQUEST_TIMEOUT_SECONDS},
|
|
78
|
+
)
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
async def judge(
|
|
82
|
+
model: Model,
|
|
83
|
+
query: str,
|
|
84
|
+
chunks: Sequence[Chunk],
|
|
85
|
+
concurrency: int = DEFAULT_CONCURRENCY,
|
|
86
|
+
) -> list[float]:
|
|
87
|
+
"""Score each chunk in [0, 1], order preserved.
|
|
88
|
+
|
|
89
|
+
Any failed judgment fails the whole search (siblings are cancelled):
|
|
90
|
+
a partial scan reported as a complete one is worse than an error.
|
|
91
|
+
"""
|
|
92
|
+
agent = build_agent(model, query)
|
|
93
|
+
gate = asyncio.Semaphore(concurrency)
|
|
94
|
+
|
|
95
|
+
async def one(chunk: Chunk) -> float:
|
|
96
|
+
async with gate:
|
|
97
|
+
result = await agent.run(_state(chunk))
|
|
98
|
+
return result.output.score
|
|
99
|
+
|
|
100
|
+
async with asyncio.TaskGroup() as group:
|
|
101
|
+
tasks = [group.create_task(one(chunk)) for chunk in chunks]
|
|
102
|
+
return [task.result() for task in tasks]
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"""jev_grep: semantic code search (a jevgrep reimplementation) on TypeSafe's Jev.
|
|
2
|
+
|
|
3
|
+
Registers a ``semantic_grep`` tool alongside the regular ``grep``. It is only
|
|
4
|
+
advertised to agents once ``TYPESAFE_API_KEY`` is configured, so agents never
|
|
5
|
+
see a tool that can only fail.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from code_puppy.callbacks import register_callback
|
|
9
|
+
|
|
10
|
+
from .config import get_typesafe_api_key
|
|
11
|
+
from .tool import register_semantic_grep
|
|
12
|
+
|
|
13
|
+
TOOL_NAME = "semantic_grep"
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def _register_tools():
|
|
17
|
+
return [{"name": TOOL_NAME, "register_func": register_semantic_grep}]
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def _advertise_when_configured(agent_name=None):
|
|
21
|
+
return [TOOL_NAME] if get_typesafe_api_key() else []
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
register_callback("register_tools", _register_tools)
|
|
25
|
+
register_callback("register_agent_tools", _advertise_when_configured)
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"""Local BM25 shortlist (port of jevgrep's retrieve.mjs).
|
|
2
|
+
|
|
3
|
+
Cheap lexical ranking decides which snippets are worth a Jev judgment. It is
|
|
4
|
+
a shortlist, not a verdict: code with unrelated wording can be missed, which
|
|
5
|
+
is why coverage is reported back to the caller.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
import math
|
|
11
|
+
import re
|
|
12
|
+
from collections import Counter
|
|
13
|
+
from collections.abc import Sequence
|
|
14
|
+
|
|
15
|
+
from .chunks import Chunk
|
|
16
|
+
|
|
17
|
+
_STOP = frozenset(
|
|
18
|
+
"a an the is are was were to of in on for from with where how does do this "
|
|
19
|
+
"that it and or code function files file find which".split()
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
_SYNONYM_GROUPS = (
|
|
23
|
+
"auth authentication authenticate login signin session",
|
|
24
|
+
"retry retries backoff attempt",
|
|
25
|
+
"cache cached caching memo memoize",
|
|
26
|
+
"delete remove cleanup unlink",
|
|
27
|
+
"permission permissions authorization authorize access allowed",
|
|
28
|
+
"expire expired expires expiration expiry timeout ttl",
|
|
29
|
+
"save persist persistence storage store write",
|
|
30
|
+
"error errors failure failed exception throw catch",
|
|
31
|
+
"payment payments billing subscription invoice charge",
|
|
32
|
+
"cancel abort cancellation",
|
|
33
|
+
"parallel concurrent concurrency simultaneous",
|
|
34
|
+
"duplicate duplicates deduplicate dedup unique",
|
|
35
|
+
)
|
|
36
|
+
_VOCABULARY = {
|
|
37
|
+
term: group.split() for group in _SYNONYM_GROUPS for term in group.split()
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
_CAMEL = re.compile(r"([a-z\d])([A-Z])")
|
|
41
|
+
_WORD = re.compile(r"[^\W_]+")
|
|
42
|
+
_SYNONYM_WEIGHT = 0.3
|
|
43
|
+
_META_BOOST = 3
|
|
44
|
+
_K1, _B = 1.2, 0.75
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def terms(text: str) -> list[str]:
|
|
48
|
+
"""Lower-cased identifier-aware tokens: ``refreshToken`` -> refresh, token."""
|
|
49
|
+
words = _WORD.findall(_CAMEL.sub(r"\1 \2", text).lower())
|
|
50
|
+
return [w for w in words if len(w) > 1 and w not in _STOP]
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def _query_weights(query: str) -> dict[str, float]:
|
|
54
|
+
weights = dict.fromkeys(terms(query), 1.0)
|
|
55
|
+
for term in list(weights):
|
|
56
|
+
for synonym in _VOCABULARY.get(term, ()):
|
|
57
|
+
weights.setdefault(synonym, _SYNONYM_WEIGHT)
|
|
58
|
+
return weights
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def rank(query: str, chunks: Sequence[Chunk]) -> list[Chunk]:
|
|
62
|
+
"""Chunks ordered by BM25 relevance to ``query`` (stable on ties)."""
|
|
63
|
+
weights = _query_weights(query)
|
|
64
|
+
docs: list[tuple[Counter, int]] = []
|
|
65
|
+
for chunk in chunks:
|
|
66
|
+
body, meta = terms(chunk.text), terms(f"{chunk.path} {chunk.symbol or ''}")
|
|
67
|
+
freq = Counter(body)
|
|
68
|
+
for word in meta:
|
|
69
|
+
freq[word] += _META_BOOST
|
|
70
|
+
docs.append((freq, len(body) + len(meta)))
|
|
71
|
+
|
|
72
|
+
n = len(docs)
|
|
73
|
+
average = (sum(length for _, length in docs) / n if n else 0) or 1
|
|
74
|
+
df = {t: sum(1 for freq, _ in docs if t in freq) for t in weights}
|
|
75
|
+
|
|
76
|
+
def score(doc: tuple[Counter, int]) -> float:
|
|
77
|
+
freq, length = doc
|
|
78
|
+
total = 0.0
|
|
79
|
+
for word, weight in weights.items():
|
|
80
|
+
tf = freq.get(word, 0)
|
|
81
|
+
if not tf:
|
|
82
|
+
continue
|
|
83
|
+
idf = math.log(1 + (n - df[word] + 0.5) / (df[word] + 0.5))
|
|
84
|
+
norm = _K1 * (1 - _B + _B * length / average)
|
|
85
|
+
total += weight * idf * tf * (_K1 + 1) / (tf + norm)
|
|
86
|
+
return total
|
|
87
|
+
|
|
88
|
+
scored = [(score(doc), chunk) for doc, chunk in zip(docs, chunks)]
|
|
89
|
+
scored.sort(key=lambda sc: (-sc[0], sc[1].path, sc[1].line))
|
|
90
|
+
return [chunk for _, chunk in scored]
|