code-puppy 0.0.591__tar.gz → 0.0.592__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.591 → code_puppy-0.0.592}/PKG-INFO +1 -1
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/agents/_runtime.py +31 -15
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/claude_cache_client.py +9 -2
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/claude_code_oauth/auth_retry.py +5 -2
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/claude_code_oauth/utils.py +22 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/pyproject.toml +1 -1
- {code_puppy-0.0.591 → code_puppy-0.0.592}/.gitignore +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/LICENSE +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/README.md +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/__init__.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/__main__.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/agents/__init__.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/agents/_builder.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/agents/_compaction.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/agents/_diagnostics.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/agents/_history.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/agents/_key_listeners.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/agents/_non_streaming_render.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/agents/_run_signals.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/agents/_steer_processor.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/agents/agent_code_puppy.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/agents/agent_creator_agent.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/agents/agent_helios.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/agents/agent_manager.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/agents/agent_planning.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/agents/agent_qa_kitten.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/agents/base_agent.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/agents/event_stream_handler.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/agents/json_agent.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/agents/run_stats.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/agents/smooth_stream.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/agents/subagent_stream_handler.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/callbacks.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/chatgpt_codex_client.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/cli_runner.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/command_line/__init__.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/command_line/add_model_menu.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/command_line/agent_menu.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/command_line/attachments.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/command_line/autosave_menu.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/command_line/autosave_search.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/command_line/clipboard.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/command_line/colors_menu.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/command_line/command_handler.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/command_line/command_registry.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/command_line/config_apply.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/command_line/config_commands.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/command_line/core_commands.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/command_line/diff_menu.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/command_line/file_index.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/command_line/file_path_completion.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/command_line/judges_menu.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/command_line/load_context_completion.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/command_line/mcp/__init__.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/command_line/mcp/base.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/command_line/mcp/catalog_server_installer.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/command_line/mcp/custom_server_form.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/command_line/mcp/custom_server_installer.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/command_line/mcp/edit_command.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/command_line/mcp/handler.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/command_line/mcp/help_command.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/command_line/mcp/install_command.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/command_line/mcp/install_menu.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/command_line/mcp/list_command.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/command_line/mcp/logs_command.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/command_line/mcp/remove_command.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/command_line/mcp/restart_command.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/command_line/mcp/search_command.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/command_line/mcp/silence_warning_command.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/command_line/mcp/start_all_command.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/command_line/mcp/start_command.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/command_line/mcp/status_command.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/command_line/mcp/stop_all_command.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/command_line/mcp/stop_command.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/command_line/mcp/utils.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/command_line/mcp/wizard_utils.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/command_line/mcp_binding_menu.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/command_line/mcp_completion.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/command_line/model_picker_completion.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/command_line/model_settings_menu.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/command_line/onboarding_slides.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/command_line/onboarding_wizard.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/command_line/pagination.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/command_line/pin_command_completion.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/command_line/prompt_toolkit_completion.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/command_line/session_commands.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/command_line/set_menu.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/command_line/set_menu_catalog.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/command_line/set_menu_render.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/command_line/set_menu_schema.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/command_line/set_menu_settings.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/command_line/set_menu_shims.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/command_line/set_menu_values.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/command_line/shell_passthrough.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/command_line/skills_completion.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/command_line/uc_menu.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/command_line/utils.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/command_line/wiggum_state.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/config.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/error_logging.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/gemini_code_assist.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/gemini_model.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/hook_engine/README.md +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/hook_engine/__init__.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/hook_engine/aliases.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/hook_engine/engine.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/hook_engine/executor.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/hook_engine/matcher.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/hook_engine/models.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/hook_engine/registry.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/hook_engine/validator.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/http_utils.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/keymap.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/list_filtering.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/main.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/mcp_/__init__.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/mcp_/agent_bindings.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/mcp_/async_lifecycle.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/mcp_/blocking_startup.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/mcp_/captured_stdio_server.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/mcp_/circuit_breaker.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/mcp_/config_wizard.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/mcp_/dashboard.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/mcp_/error_isolation.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/mcp_/examples/retry_example.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/mcp_/health_monitor.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/mcp_/managed_server.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/mcp_/manager.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/mcp_/mcp_logs.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/mcp_/registry.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/mcp_/retry_manager.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/mcp_/server_registry_catalog.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/mcp_/status_tracker.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/mcp_/system_tools.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/mcp_/tool_arg_coercion.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/mcp_prompts/__init__.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/mcp_prompts/hook_creator.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/messaging/__init__.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/messaging/bar_painters.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/messaging/bar_rendering.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/messaging/bottom_bar.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/messaging/bus.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/messaging/commands.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/messaging/editor_actions.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/messaging/editor_completion.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/messaging/editor_display.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/messaging/editor_history.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/messaging/editor_keys.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/messaging/editor_paste.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/messaging/line_editor.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/messaging/markdown_patches.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/messaging/message_queue.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/messaging/messages.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/messaging/pause_controller.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/messaging/prompt_prefix_style.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/messaging/queue_console.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/messaging/renderers.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/messaging/rich_renderer.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/messaging/run_ui.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/messaging/run_ui_wiring.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/messaging/spinner/__init__.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/messaging/subagent_console.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/model_descriptions.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/model_factory.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/model_switching.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/model_utils.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/models.json +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/models_dev_api.json +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/models_dev_parser.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/__init__.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/agent_skills/__init__.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/agent_skills/config.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/agent_skills/discovery.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/agent_skills/downloader.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/agent_skills/enabled_skills.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/agent_skills/installer.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/agent_skills/metadata.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/agent_skills/prompt_builder.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/agent_skills/register_callbacks.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/agent_skills/remote_catalog.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/agent_skills/skill_catalog.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/agent_skills/skill_commands.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/agent_skills/skills_install_menu.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/agent_skills/skills_menu.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/aws_bedrock/__init__.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/aws_bedrock/config.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/aws_bedrock/register_callbacks.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/aws_bedrock/utils.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/azure_foundry/README.md +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/azure_foundry/__init__.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/azure_foundry/config.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/azure_foundry/discovery.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/azure_foundry/register_callbacks.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/azure_foundry/token.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/azure_foundry/utils.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/btw/__init__.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/btw/inline_view.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/btw/register_callbacks.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/btw/side_query.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/chatgpt_oauth/__init__.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/chatgpt_oauth/config.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/chatgpt_oauth/oauth_flow.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/chatgpt_oauth/register_callbacks.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/chatgpt_oauth/test_plugin.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/chatgpt_oauth/utils.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/claude_code_hooks/__init__.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/claude_code_hooks/config.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/claude_code_hooks/register_callbacks.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/claude_code_oauth/README.md +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/claude_code_oauth/SETUP.md +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/claude_code_oauth/__init__.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/claude_code_oauth/config.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/claude_code_oauth/fast_mode.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/claude_code_oauth/prompt_handler.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/claude_code_oauth/register_callbacks.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/claude_code_oauth/test_fast_mode.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/claude_code_oauth/test_plugin.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/claude_code_oauth/token_refresh_heartbeat.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/code_puppy_agent/SKILL.md +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/code_puppy_agent/__init__.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/code_puppy_agent/register_callbacks.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/config.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/context_indicator/__init__.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/context_indicator/register_callbacks.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/context_indicator/usage.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/copilot_auth/__init__.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/copilot_auth/config.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/copilot_auth/reasoning_client.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/copilot_auth/register_callbacks.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/copilot_auth/utils.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/customizable_commands/__init__.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/customizable_commands/register_callbacks.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/dbos_durable_exec/__init__.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/dbos_durable_exec/cancel.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/dbos_durable_exec/commands.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/dbos_durable_exec/config.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/dbos_durable_exec/lifecycle.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/dbos_durable_exec/register_callbacks.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/dbos_durable_exec/runtime.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/dbos_durable_exec/startup_lock.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/dbos_durable_exec/workflow_ids.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/dbos_durable_exec/wrapper.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/destructive_command_guard/__init__.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/destructive_command_guard/detector.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/destructive_command_guard/register_callbacks.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/emoji_filter/__init__.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/emoji_filter/config.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/emoji_filter/register_callbacks.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/emoji_filter/stripper.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/example_custom_command/README.md +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/example_custom_command/register_callbacks.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/file_permission_handler/__init__.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/file_permission_handler/register_callbacks.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/force_push_guard/__init__.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/force_push_guard/detector.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/force_push_guard/register_callbacks.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/force_push_guard/test_detector.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/frontend_emitter/__init__.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/frontend_emitter/emitter.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/frontend_emitter/register_callbacks.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/frontend_emitter/session_context.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/hook_creator/__init__.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/hook_creator/register_callbacks.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/hook_manager/__init__.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/hook_manager/config.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/hook_manager/hooks_menu.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/hook_manager/register_callbacks.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/oauth_puppy_html.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/obsidian_agent/README.md +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/obsidian_agent/__init__.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/obsidian_agent/agent_obsidian.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/obsidian_agent/register_callbacks.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/ollama/__init__.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/ollama/register_callbacks.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/ollama_setup/__init__.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/ollama_setup/completer.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/ollama_setup/register_callbacks.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/plugin_list/__init__.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/plugin_list/plugin_contributions.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/plugin_list/plugin_meta.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/plugin_list/plugin_text_utils.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/plugin_list/plugins_menu.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/plugin_list/plugins_menu_render.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/plugin_list/register_callbacks.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/pop_command/__init__.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/pop_command/register_callbacks.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/prompt_newline/__init__.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/prompt_newline/config.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/prompt_newline/register_callbacks.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/prune/__init__.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/prune/prune_menu.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/prune/prune_model.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/prune/prune_render.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/prune/register_callbacks.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/puppy_kennel/README.md +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/puppy_kennel/__init__.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/puppy_kennel/commands.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/puppy_kennel/config.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/puppy_kennel/kennel.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/puppy_kennel/packer.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/puppy_kennel/recorder.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/puppy_kennel/register_callbacks.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/puppy_kennel/retriever.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/puppy_kennel/schema.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/puppy_kennel/state.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/puppy_kennel/tools.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/puppy_kennel/wings.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/puppy_spinner/__init__.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/puppy_spinner/register_callbacks.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/quick_resume/__init__.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/quick_resume/register_callbacks.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/review_pr/__init__.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/review_pr/register_callbacks.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/shell_safety/__init__.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/shell_safety/agent_shell_safety.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/shell_safety/command_cache.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/shell_safety/register_callbacks.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/statusline/__init__.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/statusline/config.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/statusline/payload.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/statusline/prompt_patch.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/statusline/register_callbacks.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/statusline/runner.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/statusline/statusline_command.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/steer_queue/__init__.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/steer_queue/queue_menu.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/steer_queue/register_callbacks.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/subagent_panel/README.md +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/subagent_panel/__init__.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/subagent_panel/coalesce_patch.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/subagent_panel/panel_render.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/subagent_panel/register_callbacks.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/subagent_panel/resume_repaint.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/subagent_panel/state.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/switch_agent_resume/__init__.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/switch_agent_resume/register_callbacks.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/theme/README.md +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/theme/__init__.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/theme/bundled_palettes.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/theme/content_styles.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/theme/osc_palette.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/theme/picker.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/theme/register_callbacks.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/theme/rich_themes.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/theme/themes.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/token_ratio_learner/__init__.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/token_ratio_learner/ratios.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/token_ratio_learner/register_callbacks.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/universal_constructor/__init__.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/universal_constructor/models.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/universal_constructor/register_callbacks.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/universal_constructor/registry.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/universal_constructor/sandbox.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/wide_completion_menu/__init__.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/wide_completion_menu/register_callbacks.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/wiggum/__init__.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/wiggum/judge.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/wiggum/judge_config.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/wiggum/register_callbacks.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/wiggum/state.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/provider_credentials.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/provider_identity.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/pydantic_patches.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/reopenable_async_client.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/round_robin_model.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/session_lifecycle.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/session_migration.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/session_storage.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/status_display.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/summarization_agent.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/terminal_utils.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/tools/__init__.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/tools/agent_tools.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/tools/ask_user_question/__init__.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/tools/ask_user_question/constants.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/tools/ask_user_question/demo_tui.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/tools/ask_user_question/handler.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/tools/ask_user_question/models.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/tools/ask_user_question/registration.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/tools/ask_user_question/renderers.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/tools/ask_user_question/terminal_ui.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/tools/ask_user_question/theme.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/tools/ask_user_question/tui_loop.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/tools/browser/__init__.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/tools/browser/browser_control.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/tools/browser/browser_interactions.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/tools/browser/browser_locators.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/tools/browser/browser_manager.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/tools/browser/browser_navigation.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/tools/browser/browser_screenshot.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/tools/browser/browser_scripts.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/tools/browser/browser_workflows.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/tools/command_runner.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/tools/common.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/tools/display.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/tools/file_modifications.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/tools/file_operations.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/tools/image_tools.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/tools/model_tools.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/tools/skills_tools.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/tools/subagent_context.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/tools/subagent_invocation.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/tools/tools_content.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/tools/universal_constructor.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/undo_manager.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/uvx_detection.py +0 -0
- {code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/version_checker.py +0 -0
|
@@ -19,6 +19,7 @@ from __future__ import annotations
|
|
|
19
19
|
import asyncio
|
|
20
20
|
import signal
|
|
21
21
|
import threading
|
|
22
|
+
import time
|
|
22
23
|
import uuid
|
|
23
24
|
from contextlib import AsyncExitStack
|
|
24
25
|
from typing import Any, Callable, Iterator, List, Optional, Sequence, Type, Union
|
|
@@ -297,6 +298,7 @@ def streaming_retry(
|
|
|
297
298
|
max_attempts: int = 3,
|
|
298
299
|
delays: Sequence[float] = (1, 2, 4),
|
|
299
300
|
model_name: Optional[str] = None,
|
|
301
|
+
progress_window: float = 120.0,
|
|
300
302
|
) -> Callable[[Callable[[], Any]], Callable[[], Any]]:
|
|
301
303
|
"""Wrap a no-arg async callable with streaming-retry semantics.
|
|
302
304
|
|
|
@@ -311,36 +313,43 @@ def streaming_retry(
|
|
|
311
313
|
``agent_retryable_exception`` hook, so plugins can opt provider-specific
|
|
312
314
|
failures (e.g. OAuth auth errors) into this same retry schedule.
|
|
313
315
|
``model_name`` is forwarded to the hook so plugins can scope themselves.
|
|
316
|
+
|
|
317
|
+
``max_attempts`` caps *consecutive rapid* failures, not total failures
|
|
318
|
+
per run. An agent run wraps many model calls; a long run can hit several
|
|
319
|
+
unrelated provider blips spread across minutes of successful work. If an
|
|
320
|
+
attempt survives at least ``progress_window`` seconds before failing, it
|
|
321
|
+
clearly made progress, so the failure streak resets and the blip gets a
|
|
322
|
+
fresh retry budget. Only back-to-back quick failures — the actual
|
|
323
|
+
hopeless-loop signature — burn through the cap.
|
|
314
324
|
"""
|
|
315
325
|
from code_puppy.error_logging import log_error
|
|
316
326
|
|
|
317
327
|
def decorator(factory: Callable[[], Any]) -> Callable[[], Any]:
|
|
318
328
|
async def runner() -> Any:
|
|
319
|
-
|
|
320
|
-
|
|
329
|
+
streak = 0 # consecutive rapid failures
|
|
330
|
+
while True:
|
|
331
|
+
attempt_started = time.monotonic()
|
|
321
332
|
try:
|
|
322
333
|
return await factory()
|
|
323
334
|
except Exception as exc:
|
|
335
|
+
made_progress = (
|
|
336
|
+
time.monotonic() - attempt_started >= progress_window
|
|
337
|
+
)
|
|
324
338
|
if not should_retry_streaming(exc) and not await _plugin_says_retry(
|
|
325
|
-
exc, model_name,
|
|
339
|
+
exc, model_name, streak + 1, max_attempts
|
|
326
340
|
):
|
|
327
341
|
raise
|
|
328
|
-
|
|
342
|
+
if made_progress:
|
|
343
|
+
streak = 0
|
|
344
|
+
streak += 1
|
|
329
345
|
log_error(
|
|
330
346
|
exc,
|
|
331
347
|
context=(
|
|
332
348
|
f"streaming_retry: transient exception on attempt "
|
|
333
|
-
f"{
|
|
349
|
+
f"{streak}/{max_attempts}"
|
|
334
350
|
),
|
|
335
351
|
)
|
|
336
|
-
if
|
|
337
|
-
delay = delays[attempt] if attempt < len(delays) else delays[-1]
|
|
338
|
-
emit_warning(
|
|
339
|
-
f"\u26a1 Streaming interrupted, auto-retrying in {delay}s... "
|
|
340
|
-
f"(attempt {attempt + 1}/{max_attempts})"
|
|
341
|
-
)
|
|
342
|
-
await asyncio.sleep(delay)
|
|
343
|
-
else:
|
|
352
|
+
if streak >= max_attempts:
|
|
344
353
|
log_error(
|
|
345
354
|
exc,
|
|
346
355
|
context=(
|
|
@@ -351,8 +360,15 @@ def streaming_retry(
|
|
|
351
360
|
emit_error(
|
|
352
361
|
f"\u274c Streaming failed after {max_attempts} attempts"
|
|
353
362
|
)
|
|
354
|
-
|
|
355
|
-
|
|
363
|
+
raise
|
|
364
|
+
delay = (
|
|
365
|
+
delays[streak - 1] if streak - 1 < len(delays) else delays[-1]
|
|
366
|
+
)
|
|
367
|
+
emit_warning(
|
|
368
|
+
f"\u26a1 Streaming interrupted, auto-retrying in {delay}s... "
|
|
369
|
+
f"(attempt {streak}/{max_attempts})"
|
|
370
|
+
)
|
|
371
|
+
await asyncio.sleep(delay)
|
|
356
372
|
|
|
357
373
|
return runner
|
|
358
374
|
|
|
@@ -440,8 +440,15 @@ class ClaudeCacheAsyncClient(httpx.AsyncClient):
|
|
|
440
440
|
if response.status_code == 400:
|
|
441
441
|
is_auth_error = await self._is_cloudflare_html_error(response)
|
|
442
442
|
if is_auth_error:
|
|
443
|
-
|
|
444
|
-
|
|
443
|
+
# cf-ray + request size make edge flaps diagnosable
|
|
444
|
+
# (and reportable to Anthropic) from errors.log alone.
|
|
445
|
+
request_body = self._extract_body_bytes(request) or b""
|
|
446
|
+
logger.warning(
|
|
447
|
+
"Detected Cloudflare HTML 400 (cf-ray=%s, "
|
|
448
|
+
"request_bytes=%d, url=%s); attempting token refresh",
|
|
449
|
+
response.headers.get("cf-ray"),
|
|
450
|
+
len(request_body),
|
|
451
|
+
request.url.path,
|
|
445
452
|
)
|
|
446
453
|
|
|
447
454
|
if is_auth_error:
|
{code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/plugins/claude_code_oauth/auth_retry.py
RENAMED
|
@@ -127,14 +127,17 @@ async def handle_retryable_exception(
|
|
|
127
127
|
return False
|
|
128
128
|
|
|
129
129
|
emit_warning(
|
|
130
|
-
"Claude Code OAuth rejected the request —
|
|
130
|
+
"Claude Code OAuth rejected the request — ensuring a fresh token "
|
|
131
|
+
"before the retry…"
|
|
131
132
|
)
|
|
132
133
|
|
|
133
134
|
# refresh_access_token does blocking network I/O; keep the loop free.
|
|
135
|
+
# (It has a built-in cooldown: if a refresh just happened, it reuses the
|
|
136
|
+
# still-warm token instead of burning another refresh-token rotation.)
|
|
134
137
|
refreshed = await asyncio.to_thread(refresh_access_token, True)
|
|
135
138
|
if refreshed:
|
|
136
139
|
_broadcast_token(refreshed)
|
|
137
|
-
emit_info("Claude Code OAuth token
|
|
140
|
+
emit_info("Claude Code OAuth token ready; retrying.")
|
|
138
141
|
else:
|
|
139
142
|
# Still opt in: the HTTP client gets a fresh shot at recovery on the
|
|
140
143
|
# next attempt (including its interactive reauthentication fallback).
|
|
@@ -26,6 +26,14 @@ from .config import (
|
|
|
26
26
|
TOKEN_REFRESH_BUFFER_SECONDS = 300
|
|
27
27
|
MIN_REFRESH_BUFFER_SECONDS = 30
|
|
28
28
|
|
|
29
|
+
# Cooldown for *forced* refreshes (seconds). Every refresh-token exchange
|
|
30
|
+
# rotates the refresh token; hammering the endpoint during a flappy episode
|
|
31
|
+
# (e.g. repeated Cloudflare 400s that a new token can't cure anyway) burns
|
|
32
|
+
# through rotations for nothing and risks invalidating the token family.
|
|
33
|
+
# If the stored tokens were refreshed within this window and are still
|
|
34
|
+
# valid, force=True short-circuits to the existing access token.
|
|
35
|
+
FORCE_REFRESH_COOLDOWN_SECONDS = 30
|
|
36
|
+
|
|
29
37
|
logger = logging.getLogger(__name__)
|
|
30
38
|
|
|
31
39
|
|
|
@@ -213,6 +221,19 @@ def refresh_access_token(force: bool = False) -> Optional[str]:
|
|
|
213
221
|
if not force and not is_token_expired(tokens):
|
|
214
222
|
return tokens.get("access_token")
|
|
215
223
|
|
|
224
|
+
# Forced-refresh cooldown: a token minted seconds ago is as fresh as a
|
|
225
|
+
# new exchange would produce. Skip the rotation and reuse it.
|
|
226
|
+
if force and tokens.get("access_token") and not is_token_expired(tokens):
|
|
227
|
+
seconds_since_refresh = time.time() - float(tokens.get("refreshed_at") or 0)
|
|
228
|
+
if seconds_since_refresh < FORCE_REFRESH_COOLDOWN_SECONDS:
|
|
229
|
+
logger.info(
|
|
230
|
+
"Skipping forced token refresh (last refresh %.0fs ago, "
|
|
231
|
+
"cooldown %ds); reusing current access token",
|
|
232
|
+
seconds_since_refresh,
|
|
233
|
+
FORCE_REFRESH_COOLDOWN_SECONDS,
|
|
234
|
+
)
|
|
235
|
+
return tokens.get("access_token")
|
|
236
|
+
|
|
216
237
|
refresh_token = tokens.get("refresh_token")
|
|
217
238
|
if not refresh_token:
|
|
218
239
|
logger.debug("No refresh_token available")
|
|
@@ -259,6 +280,7 @@ def refresh_access_token(force: bool = False) -> Optional[str]:
|
|
|
259
280
|
if expires_in_value is not None:
|
|
260
281
|
tokens["expires_in"] = expires_in_value
|
|
261
282
|
tokens["expires_at"] = _calculate_expires_at(expires_in_value)
|
|
283
|
+
tokens["refreshed_at"] = time.time()
|
|
262
284
|
if save_tokens(tokens):
|
|
263
285
|
update_claude_code_model_tokens(tokens["access_token"])
|
|
264
286
|
return tokens["access_token"]
|
|
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
|
{code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/command_line/load_context_completion.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/command_line/mcp/catalog_server_installer.py
RENAMED
|
File without changes
|
|
File without changes
|
{code_puppy-0.0.591 → code_puppy-0.0.592}/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
|
{code_puppy-0.0.591 → code_puppy-0.0.592}/code_puppy/command_line/mcp/silence_warning_command.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
|
{code_puppy-0.0.591 → code_puppy-0.0.592}/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.591 → code_puppy-0.0.592}/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
|
|
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
|