code-puppy 0.0.485__tar.gz → 0.0.487__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-0.0.485 → code_puppy-0.0.487}/PKG-INFO +1 -1
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/http_utils.py +0 -60
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/model_factory.py +9 -23
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/copilot_auth/register_callbacks.py +4 -6
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/tools/file_modifications.py +73 -32
- {code_puppy-0.0.485 → code_puppy-0.0.487}/pyproject.toml +1 -1
- {code_puppy-0.0.485 → code_puppy-0.0.487}/.gitignore +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/LICENSE +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/README.md +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/__init__.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/__main__.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/agents/__init__.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/agents/_builder.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/agents/_compaction.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/agents/_diagnostics.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/agents/_history.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/agents/_key_listeners.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/agents/_non_streaming_render.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/agents/_runtime.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/agents/agent_code_puppy.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/agents/agent_creator_agent.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/agents/agent_helios.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/agents/agent_manager.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/agents/agent_planning.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/agents/agent_qa_kitten.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/agents/base_agent.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/agents/event_stream_handler.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/agents/json_agent.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/agents/subagent_stream_handler.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/callbacks.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/chatgpt_codex_client.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/claude_cache_client.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/cli_runner.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/command_line/__init__.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/command_line/add_model_menu.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/command_line/agent_menu.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/command_line/attachments.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/command_line/autosave_menu.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/command_line/clipboard.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/command_line/colors_menu.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/command_line/command_handler.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/command_line/command_registry.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/command_line/config_commands.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/command_line/core_commands.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/command_line/diff_menu.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/command_line/file_path_completion.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/command_line/load_context_completion.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/command_line/mcp/__init__.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/command_line/mcp/base.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/command_line/mcp/catalog_server_installer.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/command_line/mcp/custom_server_form.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/command_line/mcp/custom_server_installer.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/command_line/mcp/edit_command.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/command_line/mcp/handler.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/command_line/mcp/help_command.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/command_line/mcp/install_command.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/command_line/mcp/install_menu.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/command_line/mcp/list_command.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/command_line/mcp/logs_command.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/command_line/mcp/remove_command.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/command_line/mcp/restart_command.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/command_line/mcp/search_command.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/command_line/mcp/start_all_command.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/command_line/mcp/start_command.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/command_line/mcp/status_command.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/command_line/mcp/stop_all_command.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/command_line/mcp/stop_command.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/command_line/mcp/test_command.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/command_line/mcp/utils.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/command_line/mcp/wizard_utils.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/command_line/mcp_completion.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/command_line/model_picker_completion.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/command_line/model_settings_menu.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/command_line/onboarding_slides.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/command_line/onboarding_wizard.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/command_line/pagination.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/command_line/pin_command_completion.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/command_line/prompt_toolkit_completion.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/command_line/session_commands.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/command_line/shell_passthrough.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/command_line/skills_completion.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/command_line/uc_menu.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/command_line/utils.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/command_line/wiggum_state.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/config.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/error_logging.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/gemini_code_assist.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/gemini_model.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/hook_engine/README.md +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/hook_engine/__init__.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/hook_engine/aliases.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/hook_engine/engine.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/hook_engine/executor.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/hook_engine/matcher.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/hook_engine/models.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/hook_engine/registry.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/hook_engine/validator.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/keymap.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/list_filtering.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/main.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/mcp_/__init__.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/mcp_/async_lifecycle.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/mcp_/blocking_startup.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/mcp_/captured_stdio_server.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/mcp_/circuit_breaker.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/mcp_/config_wizard.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/mcp_/dashboard.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/mcp_/error_isolation.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/mcp_/examples/retry_example.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/mcp_/health_monitor.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/mcp_/managed_server.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/mcp_/manager.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/mcp_/mcp_logs.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/mcp_/registry.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/mcp_/retry_manager.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/mcp_/server_registry_catalog.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/mcp_/status_tracker.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/mcp_/system_tools.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/mcp_prompts/__init__.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/mcp_prompts/hook_creator.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/messaging/__init__.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/messaging/bus.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/messaging/commands.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/messaging/markdown_patches.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/messaging/message_queue.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/messaging/messages.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/messaging/queue_console.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/messaging/renderers.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/messaging/rich_renderer.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/messaging/spinner/__init__.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/messaging/spinner/console_spinner.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/messaging/spinner/spinner_base.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/messaging/subagent_console.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/model_switching.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/model_utils.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/models.json +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/models_dev_api.json +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/models_dev_parser.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/__init__.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/agent_skills/__init__.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/agent_skills/config.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/agent_skills/discovery.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/agent_skills/downloader.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/agent_skills/installer.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/agent_skills/metadata.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/agent_skills/prompt_builder.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/agent_skills/register_callbacks.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/agent_skills/remote_catalog.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/agent_skills/skill_catalog.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/agent_skills/skills_install_menu.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/agent_skills/skills_menu.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/aws_bedrock/__init__.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/aws_bedrock/config.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/aws_bedrock/register_callbacks.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/aws_bedrock/utils.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/azure_foundry/README.md +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/azure_foundry/__init__.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/azure_foundry/config.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/azure_foundry/discovery.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/azure_foundry/register_callbacks.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/azure_foundry/token.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/azure_foundry/utils.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/chatgpt_oauth/__init__.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/chatgpt_oauth/config.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/chatgpt_oauth/oauth_flow.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/chatgpt_oauth/register_callbacks.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/chatgpt_oauth/test_plugin.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/chatgpt_oauth/utils.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/claude_code_hooks/__init__.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/claude_code_hooks/config.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/claude_code_hooks/register_callbacks.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/claude_code_oauth/README.md +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/claude_code_oauth/SETUP.md +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/claude_code_oauth/__init__.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/claude_code_oauth/config.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/claude_code_oauth/fast_mode.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/claude_code_oauth/prompt_handler.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/claude_code_oauth/register_callbacks.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/claude_code_oauth/test_fast_mode.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/claude_code_oauth/test_plugin.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/claude_code_oauth/token_refresh_heartbeat.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/claude_code_oauth/utils.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/copilot_auth/__init__.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/copilot_auth/config.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/copilot_auth/reasoning_client.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/copilot_auth/utils.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/customizable_commands/__init__.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/customizable_commands/register_callbacks.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/dbos_durable_exec/__init__.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/dbos_durable_exec/cancel.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/dbos_durable_exec/commands.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/dbos_durable_exec/config.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/dbos_durable_exec/lifecycle.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/dbos_durable_exec/register_callbacks.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/dbos_durable_exec/runtime.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/dbos_durable_exec/workflow_ids.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/dbos_durable_exec/wrapper.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/destructive_command_guard/__init__.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/destructive_command_guard/detector.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/example_custom_command/README.md +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/example_custom_command/register_callbacks.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/file_permission_handler/__init__.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/file_permission_handler/register_callbacks.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/force_push_guard/__init__.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/force_push_guard/detector.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/force_push_guard/register_callbacks.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/force_push_guard/test_detector.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/frontend_emitter/__init__.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/frontend_emitter/emitter.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/frontend_emitter/register_callbacks.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/hook_creator/__init__.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/hook_creator/register_callbacks.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/hook_manager/__init__.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/hook_manager/config.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/hook_manager/hooks_menu.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/hook_manager/register_callbacks.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/oauth_puppy_html.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/ollama_setup/__init__.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/ollama_setup/completer.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/ollama_setup/register_callbacks.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/pop_command/__init__.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/pop_command/register_callbacks.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/shell_safety/__init__.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/shell_safety/agent_shell_safety.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/shell_safety/command_cache.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/shell_safety/register_callbacks.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/synthetic_status/__init__.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/synthetic_status/register_callbacks.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/synthetic_status/status_api.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/universal_constructor/__init__.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/universal_constructor/models.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/universal_constructor/register_callbacks.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/universal_constructor/registry.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/universal_constructor/sandbox.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/provider_identity.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/pydantic_patches.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/reopenable_async_client.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/round_robin_model.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/session_storage.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/status_display.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/summarization_agent.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/terminal_utils.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/tools/__init__.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/tools/agent_tools.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/tools/ask_user_question/__init__.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/tools/ask_user_question/constants.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/tools/ask_user_question/demo_tui.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/tools/ask_user_question/handler.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/tools/ask_user_question/models.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/tools/ask_user_question/registration.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/tools/ask_user_question/renderers.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/tools/ask_user_question/terminal_ui.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/tools/ask_user_question/theme.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/tools/ask_user_question/tui_loop.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/tools/browser/__init__.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/tools/browser/browser_control.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/tools/browser/browser_interactions.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/tools/browser/browser_locators.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/tools/browser/browser_manager.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/tools/browser/browser_navigation.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/tools/browser/browser_screenshot.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/tools/browser/browser_scripts.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/tools/browser/browser_workflows.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/tools/command_runner.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/tools/common.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/tools/display.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/tools/file_operations.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/tools/image_tools.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/tools/skills_tools.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/tools/subagent_context.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/tools/tools_content.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/tools/universal_constructor.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/uvx_detection.py +0 -0
- {code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/version_checker.py +0 -0
|
@@ -5,7 +5,6 @@ This module provides functions for creating properly configured HTTP clients.
|
|
|
5
5
|
"""
|
|
6
6
|
|
|
7
7
|
import asyncio
|
|
8
|
-
import logging
|
|
9
8
|
import os
|
|
10
9
|
import socket
|
|
11
10
|
import time
|
|
@@ -18,8 +17,6 @@ if TYPE_CHECKING:
|
|
|
18
17
|
import requests
|
|
19
18
|
from code_puppy.config import get_http2
|
|
20
19
|
|
|
21
|
-
logger = logging.getLogger(__name__)
|
|
22
|
-
|
|
23
20
|
|
|
24
21
|
@dataclass
|
|
25
22
|
class ProxyConfig:
|
|
@@ -343,63 +340,6 @@ def create_reopenable_async_client(
|
|
|
343
340
|
return httpx.AsyncClient(**base_kwargs)
|
|
344
341
|
|
|
345
342
|
|
|
346
|
-
def disable_openai_sdk_retries(
|
|
347
|
-
http_client: httpx.AsyncClient,
|
|
348
|
-
**openai_kwargs: Any,
|
|
349
|
-
) -> dict:
|
|
350
|
-
"""When a RetryingAsyncClient is used as http_client for the OpenAI SDK,
|
|
351
|
-
disable the SDK's own retries to avoid multiplicative retry explosion.
|
|
352
|
-
|
|
353
|
-
The OpenAI SDK defaults to max_retries=2, and RetryingAsyncClient has 5.
|
|
354
|
-
Together with 3 streaming retries, a 429 can trigger up to
|
|
355
|
-
3 x 3 x 5 = 45 retries. Disabling SDK retries caps this at 3 x 5 = 15.
|
|
356
|
-
|
|
357
|
-
Returns provider kwargs. If the client is NOT a RetryingAsyncClient,
|
|
358
|
-
returns {"http_client": client} (+ any openai_kwargs as separate keys).
|
|
359
|
-
If it IS a RetryingAsyncClient, returns {"openai_client": AsyncOpenAI(...)}
|
|
360
|
-
with max_retries=0 and the provided openai_kwargs folded in.
|
|
361
|
-
Falls back to {"http_client": client} if AsyncOpenAI construction fails
|
|
362
|
-
(e.g. missing api_key).
|
|
363
|
-
|
|
364
|
-
Args:
|
|
365
|
-
http_client: The httpx client (possibly RetryingAsyncClient).
|
|
366
|
-
**openai_kwargs: Extra kwargs for AsyncOpenAI (api_key, base_url, etc).
|
|
367
|
-
Only used when creating an openai_client to bypass SDK retries.
|
|
368
|
-
"""
|
|
369
|
-
if isinstance(http_client, RetryingAsyncClient):
|
|
370
|
-
try:
|
|
371
|
-
from openai import AsyncOpenAI
|
|
372
|
-
|
|
373
|
-
openai_client = AsyncOpenAI(
|
|
374
|
-
http_client=http_client,
|
|
375
|
-
max_retries=0,
|
|
376
|
-
**openai_kwargs,
|
|
377
|
-
)
|
|
378
|
-
return {"openai_client": openai_client}
|
|
379
|
-
except ImportError:
|
|
380
|
-
# openai package not installed; fall through
|
|
381
|
-
pass
|
|
382
|
-
except Exception as exc:
|
|
383
|
-
# Missing api_key (OpenAIError), wrong kwargs (TypeError),
|
|
384
|
-
# or other construction failures — fall back gracefully.
|
|
385
|
-
try:
|
|
386
|
-
from openai import OpenAIError as _OpenAIError
|
|
387
|
-
|
|
388
|
-
_warnable = (TypeError, ValueError, _OpenAIError)
|
|
389
|
-
except ImportError:
|
|
390
|
-
_warnable = (TypeError, ValueError)
|
|
391
|
-
if isinstance(exc, _warnable):
|
|
392
|
-
emit_warning(
|
|
393
|
-
f"Could not disable OpenAI SDK retries ({exc}). "
|
|
394
|
-
f"Falling back to http_client mode — multiplicative retries possible."
|
|
395
|
-
)
|
|
396
|
-
else: # pragma: no cover
|
|
397
|
-
logger.debug("Unexpected error disabling OpenAI SDK retries: %s", exc)
|
|
398
|
-
result = {"http_client": http_client}
|
|
399
|
-
result.update(openai_kwargs)
|
|
400
|
-
return result
|
|
401
|
-
|
|
402
|
-
|
|
403
343
|
def is_cert_bundle_available() -> bool:
|
|
404
344
|
cert_path = get_cert_bundle_path()
|
|
405
345
|
if cert_path is None:
|
|
@@ -25,12 +25,7 @@ from code_puppy.messaging import emit_warning
|
|
|
25
25
|
from . import callbacks
|
|
26
26
|
from .claude_cache_client import ClaudeCacheAsyncClient, patch_anthropic_client_messages
|
|
27
27
|
from .config import EXTRA_MODELS_FILE, get_value, get_yolo_mode
|
|
28
|
-
from .http_utils import
|
|
29
|
-
create_async_client,
|
|
30
|
-
disable_openai_sdk_retries,
|
|
31
|
-
get_cert_bundle_path,
|
|
32
|
-
get_http2,
|
|
33
|
-
)
|
|
28
|
+
from .http_utils import create_async_client, get_cert_bundle_path, get_http2
|
|
34
29
|
from .provider_identity import (
|
|
35
30
|
make_anthropic_provider,
|
|
36
31
|
make_openai_provider,
|
|
@@ -705,20 +700,11 @@ class ModelFactory:
|
|
|
705
700
|
verify=verify,
|
|
706
701
|
timeout=timeout if timeout is not None else 180,
|
|
707
702
|
)
|
|
703
|
+
provider_args = {"base_url": url}
|
|
708
704
|
if isinstance(client, httpx.AsyncClient):
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
openai_kwargs = {}
|
|
713
|
-
if url:
|
|
714
|
-
openai_kwargs["base_url"] = url
|
|
715
|
-
if api_key:
|
|
716
|
-
openai_kwargs["api_key"] = api_key
|
|
717
|
-
provider_args = disable_openai_sdk_retries(client, **openai_kwargs)
|
|
718
|
-
else:
|
|
719
|
-
provider_args = {"base_url": url}
|
|
720
|
-
if api_key:
|
|
721
|
-
provider_args["api_key"] = api_key
|
|
705
|
+
provider_args["http_client"] = client
|
|
706
|
+
if api_key:
|
|
707
|
+
provider_args["api_key"] = api_key
|
|
722
708
|
provider = make_openai_provider(provider_identity, **provider_args)
|
|
723
709
|
model = OpenAIChatModel(model_name=model_config["name"], provider=provider)
|
|
724
710
|
if model_name == "chatgpt-gpt-5-codex":
|
|
@@ -805,10 +791,10 @@ class ModelFactory:
|
|
|
805
791
|
model_name="cerebras",
|
|
806
792
|
timeout=timeout if timeout is not None else 180,
|
|
807
793
|
)
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
794
|
+
provider_args = dict(
|
|
795
|
+
api_key=api_key,
|
|
796
|
+
http_client=client,
|
|
797
|
+
)
|
|
812
798
|
provider = ZaiCerebrasProvider(**provider_args)
|
|
813
799
|
|
|
814
800
|
return OpenAIChatModel(model_name=model_config["name"], provider=provider)
|
{code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/plugins/copilot_auth/register_callbacks.py
RENAMED
|
@@ -358,7 +358,7 @@ def _create_copilot_model(model_name: str, model_config: Dict, config: Dict) ->
|
|
|
358
358
|
from pydantic_ai.models.openai import OpenAIChatModel
|
|
359
359
|
from pydantic_ai.providers.openai import OpenAIProvider
|
|
360
360
|
|
|
361
|
-
from code_puppy.http_utils import create_async_client
|
|
361
|
+
from code_puppy.http_utils import create_async_client
|
|
362
362
|
|
|
363
363
|
# Discover token — match against the host stored in the model config
|
|
364
364
|
host = model_config.get("copilot_host", "github.com")
|
|
@@ -414,14 +414,12 @@ def _create_copilot_model(model_name: str, model_config: Dict, config: Dict) ->
|
|
|
414
414
|
if config_url:
|
|
415
415
|
base_url = config_url
|
|
416
416
|
|
|
417
|
-
#
|
|
418
|
-
|
|
419
|
-
provider_kwargs = disable_openai_sdk_retries(
|
|
420
|
-
client,
|
|
417
|
+
# Use a placeholder API key — the actual token is injected by _CopilotAuth
|
|
418
|
+
provider = OpenAIProvider(
|
|
421
419
|
api_key="copilot-session-managed",
|
|
422
420
|
base_url=base_url,
|
|
421
|
+
http_client=client,
|
|
423
422
|
)
|
|
424
|
-
provider = OpenAIProvider(**provider_kwargs)
|
|
425
423
|
|
|
426
424
|
# Build a model profile that tells pydantic-ai how to handle thinking.
|
|
427
425
|
# Claude models behind the Copilot API return thinking in a custom field
|
|
@@ -793,6 +793,21 @@ _REPLACEMENT_ITEM_SCHEMA = {
|
|
|
793
793
|
InlineReplacement = Annotated[Dict[str, str], WithJsonSchema(_REPLACEMENT_ITEM_SCHEMA)]
|
|
794
794
|
|
|
795
795
|
|
|
796
|
+
def _try_json_repair(v: Any) -> Any:
|
|
797
|
+
"""Best-effort: turn a JSON-ish string into a real Python value.
|
|
798
|
+
|
|
799
|
+
Returns the parsed object on success, or the original ``v`` unchanged on
|
|
800
|
+
failure (or if ``v`` isn't a string in the first place). Used by both the
|
|
801
|
+
outer list coercion and the per-item validation in ``replace_in_file``.
|
|
802
|
+
"""
|
|
803
|
+
if not isinstance(v, str):
|
|
804
|
+
return v
|
|
805
|
+
try:
|
|
806
|
+
return json.loads(json_repair.repair_json(v))
|
|
807
|
+
except Exception:
|
|
808
|
+
return v
|
|
809
|
+
|
|
810
|
+
|
|
796
811
|
def _coerce_replacements_arg(v: Any) -> Any:
|
|
797
812
|
"""Coerce a stringified JSON array back into an actual list.
|
|
798
813
|
|
|
@@ -803,13 +818,7 @@ def _coerce_replacements_arg(v: Any) -> Any:
|
|
|
803
818
|
the normal validator. Non-strings pass through untouched so regular list
|
|
804
819
|
inputs keep their fast path.
|
|
805
820
|
"""
|
|
806
|
-
|
|
807
|
-
try:
|
|
808
|
-
return json.loads(json_repair.repair_json(v))
|
|
809
|
-
except Exception:
|
|
810
|
-
# Fall through; let Pydantic raise its normal, informative error.
|
|
811
|
-
return v
|
|
812
|
-
return v
|
|
821
|
+
return _try_json_repair(v)
|
|
813
822
|
|
|
814
823
|
|
|
815
824
|
# List type that tolerates JSON-string-encoded arrays coming from the wire.
|
|
@@ -836,32 +845,64 @@ def register_replace_in_file(agent):
|
|
|
836
845
|
Replacements are applied sequentially. Prefer this over full file rewrites.
|
|
837
846
|
"""
|
|
838
847
|
group_id = generate_group_id("replace_in_file", file_path)
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
848
|
+
try:
|
|
849
|
+
# Validate replacements up front so a malformed payload from the
|
|
850
|
+
# model returns a clean error instead of bubbling a KeyError up
|
|
851
|
+
# through pydantic_ai and tearing down the whole agent run.
|
|
852
|
+
normalized: List[Dict[str, str]] = []
|
|
853
|
+
for idx, raw in enumerate(replacements):
|
|
854
|
+
# Per-item json_repair: some models stringify each replacement
|
|
855
|
+
# individually (e.g. ["{\"old_str\": ...}", ...]). Heal those
|
|
856
|
+
# before strict validation so we don't reject recoverable input.
|
|
857
|
+
r = _try_json_repair(raw)
|
|
858
|
+
if not isinstance(r, dict):
|
|
859
|
+
return {
|
|
860
|
+
"error": (
|
|
861
|
+
f"replacements[{idx}] must be an object with "
|
|
862
|
+
f"'old_str' and 'new_str' keys, got {type(raw).__name__}."
|
|
863
|
+
)
|
|
864
|
+
}
|
|
865
|
+
missing = [k for k in ("old_str", "new_str") if k not in r]
|
|
866
|
+
if missing:
|
|
867
|
+
return {
|
|
868
|
+
"error": (
|
|
869
|
+
f"replacements[{idx}] is missing required key(s): "
|
|
870
|
+
f"{', '.join(missing)}. Each replacement must include "
|
|
871
|
+
f"both 'old_str' and 'new_str'."
|
|
872
|
+
)
|
|
873
|
+
}
|
|
874
|
+
normalized.append({"old_str": r["old_str"], "new_str": r["new_str"]})
|
|
863
875
|
|
|
864
|
-
|
|
876
|
+
result = _replace_in_file_helper(
|
|
877
|
+
context, file_path, normalized, message_group=group_id
|
|
878
|
+
)
|
|
879
|
+
if "diff" in result:
|
|
880
|
+
del result["diff"]
|
|
881
|
+
|
|
882
|
+
# Trigger legacy edit_file callbacks for backward compatibility
|
|
883
|
+
payload = ReplacementsPayload(
|
|
884
|
+
file_path=file_path,
|
|
885
|
+
replacements=[
|
|
886
|
+
Replacement(old_str=r["old_str"], new_str=r["new_str"])
|
|
887
|
+
for r in normalized
|
|
888
|
+
],
|
|
889
|
+
)
|
|
890
|
+
enhanced_results = on_edit_file(context, result, payload)
|
|
891
|
+
if enhanced_results:
|
|
892
|
+
for enhanced_result in enhanced_results:
|
|
893
|
+
if enhanced_result is not None:
|
|
894
|
+
result = enhanced_result
|
|
895
|
+
break
|
|
896
|
+
|
|
897
|
+
return result
|
|
898
|
+
except Exception as exc:
|
|
899
|
+
# Last line of defense — never let this tool crash the agent run.
|
|
900
|
+
_log_error(
|
|
901
|
+
"Unhandled exception in replace_in_file",
|
|
902
|
+
exc,
|
|
903
|
+
message_group=group_id,
|
|
904
|
+
)
|
|
905
|
+
return {"error": f"replace_in_file failed: {exc}"}
|
|
865
906
|
|
|
866
907
|
|
|
867
908
|
def register_delete_snippet(agent):
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/command_line/load_context_completion.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/command_line/mcp/catalog_server_installer.py
RENAMED
|
File without changes
|
|
File without changes
|
{code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/command_line/mcp/custom_server_installer.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/command_line/model_picker_completion.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{code_puppy-0.0.485 → code_puppy-0.0.487}/code_puppy/command_line/prompt_toolkit_completion.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|