code-puppy 0.0.371__tar.gz → 0.0.373__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.371 → code_puppy-0.0.373}/PKG-INFO +1 -1
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/claude_cache_client.py +9 -9
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/command_line/add_model_menu.py +13 -4
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/command_line/model_settings_menu.py +15 -3
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/models.json +12 -12
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/plugins/claude_code_oauth/README.md +1 -1
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/plugins/claude_code_oauth/SETUP.md +1 -1
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/plugins/claude_code_oauth/utils.py +44 -13
- {code_puppy-0.0.371 → code_puppy-0.0.373}/pyproject.toml +1 -1
- {code_puppy-0.0.371 → code_puppy-0.0.373}/.gitignore +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/LICENSE +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/README.md +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/__init__.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/__main__.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/agents/__init__.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/agents/agent_c_reviewer.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/agents/agent_code_puppy.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/agents/agent_code_reviewer.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/agents/agent_cpp_reviewer.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/agents/agent_creator_agent.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/agents/agent_golang_reviewer.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/agents/agent_javascript_reviewer.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/agents/agent_manager.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/agents/agent_pack_leader.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/agents/agent_planning.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/agents/agent_python_programmer.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/agents/agent_python_reviewer.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/agents/agent_qa_expert.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/agents/agent_qa_kitten.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/agents/agent_security_auditor.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/agents/agent_terminal_qa.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/agents/agent_typescript_reviewer.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/agents/base_agent.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/agents/event_stream_handler.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/agents/json_agent.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/agents/pack/__init__.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/agents/pack/bloodhound.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/agents/pack/husky.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/agents/pack/retriever.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/agents/pack/shepherd.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/agents/pack/terrier.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/agents/pack/watchdog.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/agents/prompt_reviewer.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/agents/subagent_stream_handler.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/api/__init__.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/api/app.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/api/main.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/api/pty_manager.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/api/routers/__init__.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/api/routers/agents.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/api/routers/commands.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/api/routers/config.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/api/routers/sessions.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/api/templates/terminal.html +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/api/websocket.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/callbacks.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/chatgpt_codex_client.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/cli_runner.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/command_line/__init__.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/command_line/agent_menu.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/command_line/attachments.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/command_line/autosave_menu.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/command_line/clipboard.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/command_line/colors_menu.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/command_line/command_handler.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/command_line/command_registry.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/command_line/config_commands.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/command_line/core_commands.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/command_line/diff_menu.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/command_line/file_path_completion.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/command_line/load_context_completion.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/command_line/mcp/__init__.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/command_line/mcp/base.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/command_line/mcp/catalog_server_installer.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/command_line/mcp/custom_server_form.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/command_line/mcp/custom_server_installer.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/command_line/mcp/edit_command.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/command_line/mcp/handler.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/command_line/mcp/help_command.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/command_line/mcp/install_command.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/command_line/mcp/install_menu.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/command_line/mcp/list_command.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/command_line/mcp/logs_command.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/command_line/mcp/remove_command.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/command_line/mcp/restart_command.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/command_line/mcp/search_command.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/command_line/mcp/start_all_command.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/command_line/mcp/start_command.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/command_line/mcp/status_command.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/command_line/mcp/stop_all_command.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/command_line/mcp/stop_command.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/command_line/mcp/test_command.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/command_line/mcp/utils.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/command_line/mcp/wizard_utils.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/command_line/mcp_completion.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/command_line/model_picker_completion.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/command_line/motd.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/command_line/onboarding_slides.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/command_line/onboarding_wizard.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/command_line/pin_command_completion.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/command_line/prompt_toolkit_completion.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/command_line/session_commands.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/command_line/utils.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/config.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/error_logging.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/gemini_code_assist.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/gemini_model.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/http_utils.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/keymap.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/main.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/mcp_/__init__.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/mcp_/async_lifecycle.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/mcp_/blocking_startup.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/mcp_/captured_stdio_server.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/mcp_/circuit_breaker.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/mcp_/config_wizard.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/mcp_/dashboard.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/mcp_/error_isolation.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/mcp_/examples/retry_example.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/mcp_/health_monitor.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/mcp_/managed_server.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/mcp_/manager.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/mcp_/mcp_logs.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/mcp_/registry.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/mcp_/retry_manager.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/mcp_/server_registry_catalog.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/mcp_/status_tracker.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/mcp_/system_tools.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/messaging/__init__.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/messaging/bus.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/messaging/commands.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/messaging/markdown_patches.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/messaging/message_queue.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/messaging/messages.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/messaging/queue_console.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/messaging/renderers.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/messaging/rich_renderer.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/messaging/spinner/__init__.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/messaging/spinner/console_spinner.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/messaging/spinner/spinner_base.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/messaging/subagent_console.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/model_factory.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/model_switching.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/model_utils.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/models_dev_api.json +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/models_dev_parser.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/plugins/__init__.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/plugins/antigravity_oauth/__init__.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/plugins/antigravity_oauth/accounts.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/plugins/antigravity_oauth/antigravity_model.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/plugins/antigravity_oauth/config.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/plugins/antigravity_oauth/constants.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/plugins/antigravity_oauth/oauth.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/plugins/antigravity_oauth/register_callbacks.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/plugins/antigravity_oauth/storage.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/plugins/antigravity_oauth/test_plugin.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/plugins/antigravity_oauth/token.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/plugins/antigravity_oauth/transport.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/plugins/antigravity_oauth/utils.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/plugins/chatgpt_oauth/__init__.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/plugins/chatgpt_oauth/config.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/plugins/chatgpt_oauth/oauth_flow.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/plugins/chatgpt_oauth/register_callbacks.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/plugins/chatgpt_oauth/test_plugin.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/plugins/chatgpt_oauth/utils.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/plugins/claude_code_oauth/__init__.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/plugins/claude_code_oauth/config.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/plugins/claude_code_oauth/register_callbacks.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/plugins/claude_code_oauth/test_plugin.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/plugins/customizable_commands/__init__.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/plugins/customizable_commands/register_callbacks.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/plugins/example_custom_command/README.md +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/plugins/example_custom_command/register_callbacks.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/plugins/file_permission_handler/__init__.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/plugins/file_permission_handler/register_callbacks.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/plugins/frontend_emitter/__init__.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/plugins/frontend_emitter/emitter.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/plugins/frontend_emitter/register_callbacks.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/plugins/oauth_puppy_html.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/plugins/shell_safety/__init__.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/plugins/shell_safety/agent_shell_safety.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/plugins/shell_safety/command_cache.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/plugins/shell_safety/register_callbacks.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/prompts/antigravity_system_prompt.md +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/pydantic_patches.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/reopenable_async_client.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/round_robin_model.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/session_storage.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/status_display.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/summarization_agent.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/terminal_utils.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/tools/__init__.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/tools/agent_tools.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/tools/browser/__init__.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/tools/browser/browser_control.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/tools/browser/browser_interactions.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/tools/browser/browser_locators.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/tools/browser/browser_manager.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/tools/browser/browser_navigation.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/tools/browser/browser_screenshot.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/tools/browser/browser_scripts.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/tools/browser/browser_workflows.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/tools/browser/chromium_terminal_manager.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/tools/browser/terminal_command_tools.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/tools/browser/terminal_screenshot_tools.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/tools/browser/terminal_tools.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/tools/command_runner.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/tools/common.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/tools/display.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/tools/file_modifications.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/tools/file_operations.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/tools/subagent_context.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/tools/tools_content.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/uvx_detection.py +0 -0
- {code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/version_checker.py +0 -0
|
@@ -26,7 +26,7 @@ import httpx
|
|
|
26
26
|
|
|
27
27
|
logger = logging.getLogger(__name__)
|
|
28
28
|
|
|
29
|
-
# Refresh token if it's older than
|
|
29
|
+
# Refresh token if it's older than the configured max age (seconds)
|
|
30
30
|
TOKEN_MAX_AGE_SECONDS = 3600
|
|
31
31
|
|
|
32
32
|
# Tool name prefix for Claude Code OAuth compatibility
|
|
@@ -94,13 +94,13 @@ class ClaudeCacheAsyncClient(httpx.AsyncClient):
|
|
|
94
94
|
return age
|
|
95
95
|
|
|
96
96
|
# Fall back to calculating from 'exp' claim
|
|
97
|
-
# Assume tokens are typically valid for
|
|
97
|
+
# Assume tokens are typically valid for TOKEN_MAX_AGE_SECONDS
|
|
98
98
|
if "exp" in payload:
|
|
99
99
|
exp = float(payload["exp"])
|
|
100
100
|
# If exp is in the future, calculate how long until expiry
|
|
101
|
-
# and assume the token was issued
|
|
101
|
+
# and assume the token was issued TOKEN_MAX_AGE_SECONDS before expiry
|
|
102
102
|
time_until_exp = exp - now
|
|
103
|
-
# If token has less than
|
|
103
|
+
# If token has less than TOKEN_MAX_AGE_SECONDS left, it's "old"
|
|
104
104
|
age = TOKEN_MAX_AGE_SECONDS - time_until_exp
|
|
105
105
|
return max(0, age)
|
|
106
106
|
|
|
@@ -119,13 +119,13 @@ class ClaudeCacheAsyncClient(httpx.AsyncClient):
|
|
|
119
119
|
return None
|
|
120
120
|
|
|
121
121
|
def _should_refresh_token(self, request: httpx.Request) -> bool:
|
|
122
|
-
"""Check if the token should be refreshed (within
|
|
122
|
+
"""Check if the token should be refreshed (within the max-age window).
|
|
123
123
|
|
|
124
124
|
Uses two strategies:
|
|
125
125
|
1. Decode JWT to check token age (if possible)
|
|
126
126
|
2. Fall back to stored expires_at from token file
|
|
127
127
|
|
|
128
|
-
Returns True if token expires within TOKEN_MAX_AGE_SECONDS
|
|
128
|
+
Returns True if token expires within TOKEN_MAX_AGE_SECONDS.
|
|
129
129
|
"""
|
|
130
130
|
token = self._extract_bearer_token(request)
|
|
131
131
|
if not token:
|
|
@@ -169,7 +169,7 @@ class ClaudeCacheAsyncClient(httpx.AsyncClient):
|
|
|
169
169
|
if not tokens:
|
|
170
170
|
return False
|
|
171
171
|
|
|
172
|
-
# is_token_expired already uses
|
|
172
|
+
# is_token_expired already uses the configured refresh buffer window
|
|
173
173
|
return is_token_expired(tokens)
|
|
174
174
|
except Exception as exc:
|
|
175
175
|
logger.debug("Error checking stored token expiry: %s", exc)
|
|
@@ -366,10 +366,10 @@ class ClaudeCacheAsyncClient(httpx.AsyncClient):
|
|
|
366
366
|
|
|
367
367
|
# Handle auth errors with token refresh
|
|
368
368
|
try:
|
|
369
|
-
if response.status_code in (400, 401) and not request.extensions.get(
|
|
369
|
+
if response.status_code in (400, 401, 403) and not request.extensions.get(
|
|
370
370
|
"claude_oauth_refresh_attempted"
|
|
371
371
|
):
|
|
372
|
-
is_auth_error = response.status_code
|
|
372
|
+
is_auth_error = response.status_code in (401, 403)
|
|
373
373
|
|
|
374
374
|
if response.status_code == 400:
|
|
375
375
|
is_auth_error = self._is_cloudflare_html_error(response)
|
|
@@ -626,12 +626,21 @@ class AddModelMenu:
|
|
|
626
626
|
elif model_type == "openai" and "gpt-5" in model.model_id:
|
|
627
627
|
# GPT-5 models have special settings
|
|
628
628
|
if "codex" in model.model_id:
|
|
629
|
-
config["supported_settings"] = [
|
|
629
|
+
config["supported_settings"] = [
|
|
630
|
+
"temperature",
|
|
631
|
+
"top_p",
|
|
632
|
+
"reasoning_effort",
|
|
633
|
+
]
|
|
630
634
|
else:
|
|
631
|
-
config["supported_settings"] = [
|
|
635
|
+
config["supported_settings"] = [
|
|
636
|
+
"temperature",
|
|
637
|
+
"top_p",
|
|
638
|
+
"reasoning_effort",
|
|
639
|
+
"verbosity",
|
|
640
|
+
]
|
|
632
641
|
else:
|
|
633
|
-
# Default settings for most models
|
|
634
|
-
config["supported_settings"] = ["temperature", "seed"]
|
|
642
|
+
# Default settings for most models
|
|
643
|
+
config["supported_settings"] = ["temperature", "seed", "top_p"]
|
|
635
644
|
|
|
636
645
|
return config
|
|
637
646
|
|
|
@@ -39,10 +39,10 @@ SETTING_DEFINITIONS: Dict[str, Dict] = {
|
|
|
39
39
|
"description": "Controls randomness. Lower = more deterministic, higher = more creative.",
|
|
40
40
|
"type": "numeric",
|
|
41
41
|
"min": 0.0,
|
|
42
|
-
"max": 1.0,
|
|
43
|
-
"step": 0.
|
|
42
|
+
"max": 1.0,
|
|
43
|
+
"step": 0.05,
|
|
44
44
|
"default": None, # None means use model default
|
|
45
|
-
"format": "{:.
|
|
45
|
+
"format": "{:.2f}",
|
|
46
46
|
},
|
|
47
47
|
"seed": {
|
|
48
48
|
"name": "Seed",
|
|
@@ -54,6 +54,16 @@ SETTING_DEFINITIONS: Dict[str, Dict] = {
|
|
|
54
54
|
"default": None,
|
|
55
55
|
"format": "{:.0f}",
|
|
56
56
|
},
|
|
57
|
+
"top_p": {
|
|
58
|
+
"name": "Top-P (Nucleus Sampling)",
|
|
59
|
+
"description": "Controls token diversity. 0.0 = least random (only most likely tokens), 1.0 = most random (sample from all tokens).",
|
|
60
|
+
"type": "numeric",
|
|
61
|
+
"min": 0.0,
|
|
62
|
+
"max": 1.0,
|
|
63
|
+
"step": 0.05,
|
|
64
|
+
"default": None,
|
|
65
|
+
"format": "{:.2f}",
|
|
66
|
+
},
|
|
57
67
|
"reasoning_effort": {
|
|
58
68
|
"name": "Reasoning Effort",
|
|
59
69
|
"description": "Controls how much effort GPT-5 models spend on reasoning. Higher = more thorough but slower.",
|
|
@@ -575,6 +585,8 @@ class ModelSettingsMenu:
|
|
|
575
585
|
# Default to a sensible starting point for numeric
|
|
576
586
|
if setting_key == "temperature":
|
|
577
587
|
self.edit_value = 0.7
|
|
588
|
+
elif setting_key == "top_p":
|
|
589
|
+
self.edit_value = 0.9 # Common default for top_p
|
|
578
590
|
elif setting_key == "seed":
|
|
579
591
|
self.edit_value = 42
|
|
580
592
|
elif setting_key == "budget_tokens":
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"api_key": "$SYN_API_KEY"
|
|
8
8
|
},
|
|
9
9
|
"context_length": 200000,
|
|
10
|
-
"supported_settings": ["temperature", "seed"]
|
|
10
|
+
"supported_settings": ["temperature", "seed", "top_p"]
|
|
11
11
|
},
|
|
12
12
|
"synthetic-MiniMax-M2.1": {
|
|
13
13
|
"type": "custom_openai",
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"api_key": "$SYN_API_KEY"
|
|
18
18
|
},
|
|
19
19
|
"context_length": 195000,
|
|
20
|
-
"supported_settings": ["temperature", "seed"]
|
|
20
|
+
"supported_settings": ["temperature", "seed", "top_p"]
|
|
21
21
|
},
|
|
22
22
|
"synthetic-Kimi-K2-Thinking": {
|
|
23
23
|
"type": "custom_openai",
|
|
@@ -27,32 +27,32 @@
|
|
|
27
27
|
"api_key": "$SYN_API_KEY"
|
|
28
28
|
},
|
|
29
29
|
"context_length": 262144,
|
|
30
|
-
"supported_settings": ["temperature", "seed"]
|
|
30
|
+
"supported_settings": ["temperature", "seed", "top_p"]
|
|
31
31
|
},
|
|
32
32
|
"Gemini-3": {
|
|
33
33
|
"type": "gemini",
|
|
34
34
|
"name": "gemini-3-pro-preview",
|
|
35
35
|
"context_length": 200000,
|
|
36
|
-
"supported_settings": ["temperature"]
|
|
36
|
+
"supported_settings": ["temperature", "top_p"]
|
|
37
37
|
},
|
|
38
38
|
"Gemini-3-Long-Context": {
|
|
39
39
|
"type": "gemini",
|
|
40
40
|
"name": "gemini-3-pro-preview",
|
|
41
41
|
"context_length": 1000000,
|
|
42
|
-
"supported_settings": ["temperature"]
|
|
42
|
+
"supported_settings": ["temperature", "top_p"]
|
|
43
43
|
},
|
|
44
44
|
"gpt-5.1": {
|
|
45
45
|
"type": "openai",
|
|
46
46
|
"name": "gpt-5.1",
|
|
47
47
|
"context_length": 272000,
|
|
48
|
-
"supported_settings": ["reasoning_effort", "verbosity"],
|
|
48
|
+
"supported_settings": ["temperature", "top_p", "reasoning_effort", "verbosity"],
|
|
49
49
|
"supports_xhigh_reasoning": false
|
|
50
50
|
},
|
|
51
51
|
"gpt-5.1-codex-api": {
|
|
52
52
|
"type": "openai",
|
|
53
53
|
"name": "gpt-5.1-codex",
|
|
54
54
|
"context_length": 272000,
|
|
55
|
-
"supported_settings": ["reasoning_effort", "verbosity"],
|
|
55
|
+
"supported_settings": ["temperature", "top_p", "reasoning_effort", "verbosity"],
|
|
56
56
|
"supports_xhigh_reasoning": true
|
|
57
57
|
},
|
|
58
58
|
"Cerebras-GLM-4.7": {
|
|
@@ -63,7 +63,7 @@
|
|
|
63
63
|
"api_key": "$CEREBRAS_API_KEY"
|
|
64
64
|
},
|
|
65
65
|
"context_length": 131072,
|
|
66
|
-
"supported_settings": ["temperature", "seed"]
|
|
66
|
+
"supported_settings": ["temperature", "seed", "top_p"]
|
|
67
67
|
},
|
|
68
68
|
"claude-4-5-haiku": {
|
|
69
69
|
"type": "anthropic",
|
|
@@ -87,24 +87,24 @@
|
|
|
87
87
|
"type": "zai_coding",
|
|
88
88
|
"name": "glm-4.6",
|
|
89
89
|
"context_length": 200000,
|
|
90
|
-
"supported_settings": ["temperature"]
|
|
90
|
+
"supported_settings": ["temperature", "top_p"]
|
|
91
91
|
},
|
|
92
92
|
"zai-glm-4.6-api": {
|
|
93
93
|
"type": "zai_api",
|
|
94
94
|
"name": "glm-4.6",
|
|
95
95
|
"context_length": 200000,
|
|
96
|
-
"supported_settings": ["temperature"]
|
|
96
|
+
"supported_settings": ["temperature", "top_p"]
|
|
97
97
|
},
|
|
98
98
|
"zai-glm-4.7-coding": {
|
|
99
99
|
"type": "zai_coding",
|
|
100
100
|
"name": "glm-4.7",
|
|
101
101
|
"context_length": 200000,
|
|
102
|
-
"supported_settings": ["temperature"]
|
|
102
|
+
"supported_settings": ["temperature", "top_p"]
|
|
103
103
|
},
|
|
104
104
|
"zai-glm-4.7-api": {
|
|
105
105
|
"type": "zai_api",
|
|
106
106
|
"name": "glm-4.7",
|
|
107
107
|
"context_length": 200000,
|
|
108
|
-
"supported_settings": ["temperature"]
|
|
108
|
+
"supported_settings": ["temperature", "top_p"]
|
|
109
109
|
}
|
|
110
110
|
}
|
|
@@ -52,7 +52,7 @@ The plugin ships with sensible defaults in `config.py`:
|
|
|
52
52
|
```python
|
|
53
53
|
CLAUDE_CODE_OAUTH_CONFIG = {
|
|
54
54
|
"auth_url": "https://claude.ai/oauth/authorize",
|
|
55
|
-
"token_url": "https://
|
|
55
|
+
"token_url": "https://console.anthropic.com/v1/oauth/token",
|
|
56
56
|
"api_base_url": "https://api.anthropic.com",
|
|
57
57
|
"client_id": "9d1c250a-e61b-44d9-88ed-5944d1962f5e",
|
|
58
58
|
"scope": "org:create_api_key user:profile user:inference",
|
|
@@ -37,7 +37,7 @@ Anthropic exposes a shared **public client** (`claude-cli`) for command-line too
|
|
|
37
37
|
```python
|
|
38
38
|
CLAUDE_CODE_OAUTH_CONFIG = {
|
|
39
39
|
"auth_url": "https://claude.ai/oauth/authorize",
|
|
40
|
-
"token_url": "https://
|
|
40
|
+
"token_url": "https://console.anthropic.com/v1/oauth/token",
|
|
41
41
|
"api_base_url": "https://api.anthropic.com",
|
|
42
42
|
"client_id": "9d1c250a-e61b-44d9-88ed-5944d1962f5e",
|
|
43
43
|
"scope": "org:create_api_key user:profile user:inference",
|
|
@@ -21,10 +21,10 @@ from .config import (
|
|
|
21
21
|
get_token_storage_path,
|
|
22
22
|
)
|
|
23
23
|
|
|
24
|
-
# Proactive refresh buffer
|
|
25
|
-
#
|
|
26
|
-
|
|
27
|
-
|
|
24
|
+
# Proactive refresh buffer default (seconds). Actual buffer is dynamic
|
|
25
|
+
# based on expires_in to avoid overly aggressive refreshes.
|
|
26
|
+
TOKEN_REFRESH_BUFFER_SECONDS = 300
|
|
27
|
+
MIN_REFRESH_BUFFER_SECONDS = 30
|
|
28
28
|
|
|
29
29
|
logger = logging.getLogger(__name__)
|
|
30
30
|
|
|
@@ -146,15 +146,40 @@ def _calculate_expires_at(expires_in: Optional[float]) -> Optional[float]:
|
|
|
146
146
|
return None
|
|
147
147
|
|
|
148
148
|
|
|
149
|
-
def
|
|
149
|
+
def _calculate_refresh_buffer(expires_in: Optional[float]) -> float:
|
|
150
|
+
default_buffer = float(TOKEN_REFRESH_BUFFER_SECONDS)
|
|
151
|
+
if expires_in is None:
|
|
152
|
+
return default_buffer
|
|
153
|
+
try:
|
|
154
|
+
expires_value = float(expires_in)
|
|
155
|
+
except (TypeError, ValueError):
|
|
156
|
+
return default_buffer
|
|
157
|
+
return min(default_buffer, max(MIN_REFRESH_BUFFER_SECONDS, expires_value * 0.1))
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
def _get_expires_at_value(tokens: Dict[str, Any]) -> Optional[float]:
|
|
150
161
|
expires_at = tokens.get("expires_at")
|
|
151
162
|
if expires_at is None:
|
|
152
|
-
return
|
|
163
|
+
return None
|
|
153
164
|
try:
|
|
154
|
-
|
|
165
|
+
return float(expires_at)
|
|
155
166
|
except (TypeError, ValueError):
|
|
167
|
+
return None
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
def _is_token_actually_expired(tokens: Dict[str, Any]) -> bool:
|
|
171
|
+
expires_at_value = _get_expires_at_value(tokens)
|
|
172
|
+
if expires_at_value is None:
|
|
173
|
+
return False
|
|
174
|
+
return time.time() >= expires_at_value
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
def is_token_expired(tokens: Dict[str, Any]) -> bool:
|
|
178
|
+
expires_at_value = _get_expires_at_value(tokens)
|
|
179
|
+
if expires_at_value is None:
|
|
156
180
|
return False
|
|
157
|
-
|
|
181
|
+
buffer_seconds = _calculate_refresh_buffer(tokens.get("expires_in"))
|
|
182
|
+
return time.time() >= expires_at_value - buffer_seconds
|
|
158
183
|
|
|
159
184
|
|
|
160
185
|
def update_claude_code_model_tokens(access_token: str) -> bool:
|
|
@@ -216,11 +241,12 @@ def refresh_access_token(force: bool = False) -> Optional[str]:
|
|
|
216
241
|
new_tokens = response.json()
|
|
217
242
|
tokens["access_token"] = new_tokens.get("access_token")
|
|
218
243
|
tokens["refresh_token"] = new_tokens.get("refresh_token", refresh_token)
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
244
|
+
expires_in_value = new_tokens.get("expires_in")
|
|
245
|
+
if expires_in_value is None:
|
|
246
|
+
expires_in_value = tokens.get("expires_in")
|
|
247
|
+
if expires_in_value is not None:
|
|
248
|
+
tokens["expires_in"] = expires_in_value
|
|
249
|
+
tokens["expires_at"] = _calculate_expires_at(expires_in_value)
|
|
224
250
|
if save_tokens(tokens):
|
|
225
251
|
update_claude_code_model_tokens(tokens["access_token"])
|
|
226
252
|
return tokens["access_token"]
|
|
@@ -249,6 +275,11 @@ def get_valid_access_token() -> Optional[str]:
|
|
|
249
275
|
refreshed = refresh_access_token()
|
|
250
276
|
if refreshed:
|
|
251
277
|
return refreshed
|
|
278
|
+
if not _is_token_actually_expired(tokens):
|
|
279
|
+
logger.warning(
|
|
280
|
+
"Claude Code token refresh failed; using existing access token until expiry"
|
|
281
|
+
)
|
|
282
|
+
return access_token
|
|
252
283
|
logger.warning("Claude Code token refresh failed")
|
|
253
284
|
return None
|
|
254
285
|
|
|
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
|
{code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/command_line/load_context_completion.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{code_puppy-0.0.371 → code_puppy-0.0.373}/code_puppy/command_line/mcp/catalog_server_installer.py
RENAMED
|
File without changes
|
|
File without changes
|
{code_puppy-0.0.371 → code_puppy-0.0.373}/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.371 → code_puppy-0.0.373}/code_puppy/command_line/model_picker_completion.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{code_puppy-0.0.371 → code_puppy-0.0.373}/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
|