code-puppy-core-plugins 0.0.65__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.65 → code_puppy_core_plugins-0.0.67}/PKG-INFO +2 -2
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/chatgpt_oauth/IMAGEGEN_SKILL.md +2 -2
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/chatgpt_oauth/image_generation.py +1 -1
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/chatgpt_oauth/image_tool.py +1 -1
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/chatgpt_oauth/test_plugin.py +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.65 → code_puppy_core_plugins-0.0.67}/pyproject.toml +3 -2
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/.gitignore +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/LICENSE +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/README.md +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/acp/README.md +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/acp/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/acp/agent.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/acp/bridge.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/acp/capabilities.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/acp/commands.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/acp/content.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/acp/io_delegation.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/acp/mcp_config.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/acp/permissions.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/acp/persistence.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/acp/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/acp/replay.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/acp/session.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/acp/session_config.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/acp/state.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/agent_creator_skill/SKILL.md +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/agent_creator_skill/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.65 → 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.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/agent_skills/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/agent_skills/config.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/agent_skills/discovery.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/agent_skills/enabled_skills.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/agent_skills/metadata.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/agent_skills/prompt_builder.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/agent_skills/provider.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/agent_skills/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/agent_skills/skill_commands.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/agent_skills/skills_menu.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/auto_continue/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/auto_continue/classifier.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/auto_continue/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/aws_bedrock/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/aws_bedrock/config.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/aws_bedrock/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/aws_bedrock/utils.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/azure_foundry/README.md +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/azure_foundry/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/azure_foundry/config.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/azure_foundry/discovery.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/azure_foundry/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/azure_foundry/token.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/azure_foundry/utils.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/background_agents/README.md +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/background_agents/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/background_agents/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/btw/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/btw/inline_view.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/btw/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/btw/side_query.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/chatgpt_oauth/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/chatgpt_oauth/config.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/chatgpt_oauth/model_catalog.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/chatgpt_oauth/oauth_flow.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/chatgpt_oauth/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/chatgpt_oauth/usage.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/chatgpt_oauth/utils.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/claude_code_hooks/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/claude_code_hooks/config.py +0 -0
- {code_puppy_core_plugins-0.0.65 → 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.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/claude_code_hooks/trust.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/claude_code_oauth/README.md +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/claude_code_oauth/SETUP.md +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/claude_code_oauth/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/claude_code_oauth/config.py +0 -0
- {code_puppy_core_plugins-0.0.65 → 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.65 → 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.65 → 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.65 → 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.65 → 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.65 → 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.65 → 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.65 → 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.65 → 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.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/claude_code_oauth/utils.py +0 -0
- {code_puppy_core_plugins-0.0.65 → 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.65 → 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.65 → 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.65 → 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.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/code_puppy_agent/SKILL.md +0 -0
- {code_puppy_core_plugins-0.0.65 → 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.65 → 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.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/code_puppy_agent/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.65 → 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.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/completion_notification/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/completion_notification/config.py +0 -0
- {code_puppy_core_plugins-0.0.65 → 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.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/completion_notification/locales/es.json +0 -0
- {code_puppy_core_plugins-0.0.65 → 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.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/completion_notification/notifier.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/completion_notification/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/computer_use/NativeCapture.swift +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/computer_use/README.md +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/computer_use/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/computer_use/accessibility.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/computer_use/activation.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/computer_use/backend.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/computer_use/backend_types.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/computer_use/capture.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/computer_use/commands.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/computer_use/geometry.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/computer_use/inline_image.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/computer_use/keycodes.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/computer_use/policy.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/computer_use/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/computer_use/safety.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/computer_use/settle.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/computer_use/state.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/computer_use/tools.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/context_indicator/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/context_indicator/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/context_indicator/usage.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/copilot_auth/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/copilot_auth/config.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/copilot_auth/reasoning_client.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/copilot_auth/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/copilot_auth/responses_stream.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/copilot_auth/utils.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/customizable_commands/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/customizable_commands/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/dbos_durable_exec/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/dbos_durable_exec/cancel.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/dbos_durable_exec/commands.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/dbos_durable_exec/config.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/dbos_durable_exec/lifecycle.py +0 -0
- {code_puppy_core_plugins-0.0.65 → 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.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/dbos_durable_exec/runtime.py +0 -0
- {code_puppy_core_plugins-0.0.65 → 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.65 → 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.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/dbos_durable_exec/wrapper.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/destructive_command_guard/AGENTS.md +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/destructive_command_guard/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/destructive_command_guard/detector.py +0 -0
- {code_puppy_core_plugins-0.0.65 → 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.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/emoji_filter/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/emoji_filter/config.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/emoji_filter/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/emoji_filter/stripper.py +0 -0
- {code_puppy_core_plugins-0.0.65 → 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.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/example_custom_command/README.md +0 -0
- {code_puppy_core_plugins-0.0.65 → 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.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/file_permission_handler/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.65 → 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.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/flux_bootstrap/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.65 → 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.65 → 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.65 → 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.65 → 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.65 → 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.65 → 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.65 → 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.65 → 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.65 → 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.65 → 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.65 → 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.65 → 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.65 → 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.65 → 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.65 → 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.65 → 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.65 → 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.65 → 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.65 → 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.65 → 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.65 → 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.65 → 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.65 → 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.65 → 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.65 → 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.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/flux_bootstrap/installer.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/flux_bootstrap/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/force_push_guard/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/force_push_guard/detector.py +0 -0
- {code_puppy_core_plugins-0.0.65 → 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.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/fork/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/fork/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/frontend_emitter/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/frontend_emitter/emitter.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/frontend_emitter/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/frontend_emitter/session_context.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/grok_oauth/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/grok_oauth/config.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/grok_oauth/oauth_flow.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/grok_oauth/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/grok_oauth/utils.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/herdr/README.md +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/herdr/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/herdr/client.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/herdr/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/herdr/reporter.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/herdr/restore.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/herdr/smoke.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/herdr/sources.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/hook_creator/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/hook_creator/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/hook_manager/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/hook_manager/config.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/hook_manager/hooks_menu.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/hook_manager/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/hook_manager/trust_handler.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/logfire_oauth/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/logfire_oauth/oauth.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/logfire_oauth/query_tool.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/logfire_oauth/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/logfire_sessions/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/logfire_sessions/mirror.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/logfire_sessions/query.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/logfire_sessions/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/logfire_sessions/sync.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/mcp_binding_prompt/README.md +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/mcp_binding_prompt/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.65 → 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.65 → 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.65 → 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.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/meta_oauth/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/meta_oauth/config.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/meta_oauth/oauth_flow.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/meta_oauth/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/meta_oauth/utils.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/namespace_skill_search/README.md +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/namespace_skill_search/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/namespace_skill_search/namespaces.py +0 -0
- {code_puppy_core_plugins-0.0.65 → 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.65 → 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.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/no_tools/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/no_tools/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/oauth_pasteback.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/oauth_puppy_html.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/obsidian_agent/README.md +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/obsidian_agent/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/obsidian_agent/agent_obsidian.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/obsidian_agent/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/ollama/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/ollama/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/ollama_setup/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/ollama_setup/completer.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/ollama_setup/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/openrouter_oauth/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/openrouter_oauth/config.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/openrouter_oauth/oauth_flow.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/openrouter_oauth/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/openrouter_oauth/test_plugin.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/plugin_list/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/plugin_list/plugin_contributions.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/plugin_list/plugin_meta.py +0 -0
- {code_puppy_core_plugins-0.0.65 → 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.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/plugin_list/plugins_menu.py +0 -0
- {code_puppy_core_plugins-0.0.65 → 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.65 → 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.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/plugin_list/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/pop_command/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/pop_command/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/profiles/README.md +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/profiles/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/profiles/config.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/profiles/locales/en-US.json +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/profiles/menu.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/profiles/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/prompt_newline/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/prompt_newline/config.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/prompt_newline/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/prune/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/prune/prune_menu.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/prune/prune_model.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/prune/prune_render.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/prune/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/puppy_kennel/README.md +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/puppy_kennel/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/puppy_kennel/commands.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/puppy_kennel/config.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/puppy_kennel/kennel.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/puppy_kennel/packer.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/puppy_kennel/recorder.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/puppy_kennel/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/puppy_kennel/retriever.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/puppy_kennel/schema.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/puppy_kennel/state.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/puppy_kennel/tools.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/puppy_kennel/wings.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/puppy_spinner/README.md +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/puppy_spinner/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/puppy_spinner/builtin_frames.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/puppy_spinner/commands.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/puppy_spinner/picker.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/puppy_spinner/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/puppy_spinner/spinners.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/qa_kitten_skill/SKILL.md +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/qa_kitten_skill/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.65 → 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.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/quick_resume/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/quick_resume/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/review_pr/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/review_pr/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/session_namer/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/session_namer/namer.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/session_namer/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/spill/LICENSE.deepseek +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/spill/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/spill/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/spill/store.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/stack_dump/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/stack_dump/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/statusline/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/statusline/config.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/statusline/payload.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/statusline/prompt_patch.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/statusline/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/statusline/runner.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/statusline/statusline_command.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/steer_queue/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/steer_queue/queue_menu.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/steer_queue/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/subagent_panel/README.md +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/subagent_panel/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/subagent_panel/coalesce_patch.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/subagent_panel/panel_render.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/subagent_panel/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/subagent_panel/resume_repaint.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/subagent_panel/state.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/switch_agent_resume/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.65 → 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.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/termflow_tui.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/theme/README.md +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/theme/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/theme/bundled_palettes.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/theme/content_styles.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/theme/osc_palette.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/theme/picker.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/theme/prompt_toolkit_theme.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/theme/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/theme/rich_themes.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/theme/themes.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/timestamp_heartbeat/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/timestamp_heartbeat/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/token_ratio_learner/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/token_ratio_learner/ratios.py +0 -0
- {code_puppy_core_plugins-0.0.65 → 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.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/universal_constructor/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/universal_constructor/models.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/universal_constructor/provider.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/universal_constructor/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/universal_constructor/registry.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/universal_constructor/sandbox.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/web_retriever_skill/SKILL.md +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/web_retriever_skill/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.65 → 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.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/wiggum/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/wiggum/goal_runs.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/wiggum/judge.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/wiggum/judge_config.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/wiggum/judges_menu.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/wiggum/register_callbacks.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/wiggum/state.py +0 -0
- {code_puppy_core_plugins-0.0.65 → code_puppy_core_plugins-0.0.67}/code_puppy_core_plugins/yolo_cli/__init__.py +0 -0
- {code_puppy_core_plugins-0.0.65 → 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
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: codex-imagegen
|
|
3
|
-
description: Generate raster images with gpt-image-2 through Codex OAuth. Activate when the user asks to create a photo, illustration, icon, sprite, texture, product image, banner, or other raster artwork.
|
|
3
|
+
description: Generate raster images with gpt-image-2.1 through Codex OAuth. Activate when the user asks to create a photo, illustration, icon, sprite, texture, product image, banner, or other raster artwork.
|
|
4
4
|
version: "1.0"
|
|
5
5
|
author: code-puppy
|
|
6
6
|
tags:
|
|
@@ -13,7 +13,7 @@ tags:
|
|
|
13
13
|
# Codex Image Generation
|
|
14
14
|
|
|
15
15
|
Use the `codex_imagegen` tool when the user asks you to create raster artwork.
|
|
16
|
-
The tool uses `gpt-image-2` through the user's existing Codex OAuth session,
|
|
16
|
+
The tool uses `gpt-image-2.1` through the user's existing Codex OAuth session,
|
|
17
17
|
saves the resulting PNG, and displays it inline when iTerm2 supports doing so.
|
|
18
18
|
|
|
19
19
|
## Decision rules
|
|
@@ -46,7 +46,7 @@ from code_puppy.i18n import t
|
|
|
46
46
|
from .config import CHATGPT_OAUTH_CONFIG
|
|
47
47
|
from .utils import get_valid_access_token, load_stored_tokens
|
|
48
48
|
|
|
49
|
-
_IMAGE_MODEL = "gpt-image-2"
|
|
49
|
+
_IMAGE_MODEL = "gpt-image-2.1"
|
|
50
50
|
_REQUEST_TIMEOUT_SECONDS = 180
|
|
51
51
|
|
|
52
52
|
# Guard against pathologically large payloads: references are inlined as base64
|
|
@@ -25,7 +25,7 @@ def register_codex_imagegen(agent: Any) -> None:
|
|
|
25
25
|
prompt: str,
|
|
26
26
|
reference_images: list[str] | None = None,
|
|
27
27
|
) -> dict[str, Any]:
|
|
28
|
-
"""Generate a raster image using gpt-image-2 and Codex OAuth.
|
|
28
|
+
"""Generate a raster image using gpt-image-2.1 and Codex OAuth.
|
|
29
29
|
|
|
30
30
|
Use this when the user asks you to create a photo, illustration, icon,
|
|
31
31
|
sprite, texture, product image, banner, or other raster artwork. Write a
|
|
@@ -44,7 +44,7 @@ def test_codex_image_generation_posts_codex_payload(tmp_path):
|
|
|
44
44
|
assert call.kwargs["json"] == {
|
|
45
45
|
"prompt": "a red fox",
|
|
46
46
|
"background": "auto",
|
|
47
|
-
"model": "gpt-image-2",
|
|
47
|
+
"model": "gpt-image-2.1",
|
|
48
48
|
"quality": "auto",
|
|
49
49
|
"size": "auto",
|
|
50
50
|
}
|
|
@@ -83,7 +83,7 @@ def test_codex_image_generation_with_references_posts_edits_payload(tmp_path):
|
|
|
83
83
|
payload = call.kwargs["json"]
|
|
84
84
|
assert payload["images"] == [{"image_url": f"data:image/png;base64,{expected_b64}"}]
|
|
85
85
|
assert payload["prompt"] == "a red fox"
|
|
86
|
-
assert payload["model"] == "gpt-image-2"
|
|
86
|
+
assert payload["model"] == "gpt-image-2.1"
|
|
87
87
|
# `background` is not accepted by the edits endpoint.
|
|
88
88
|
assert "background" not in payload
|
|
89
89
|
|
|
@@ -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]
|