newcode 0.2.4__tar.gz → 0.2.5__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.
- {newcode-0.2.4 → newcode-0.2.5}/PKG-INFO +1 -1
- {newcode-0.2.4 → newcode-0.2.5}/newcode/claude_cache_client.py +15 -61
- {newcode-0.2.4 → newcode-0.2.5}/pyproject.toml +1 -1
- {newcode-0.2.4 → newcode-0.2.5}/.gitignore +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/LICENSE +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/README.md +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/__init__.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/__main__.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/agents/__init__.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/agents/agent_c_reviewer.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/agents/agent_code_agent.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/agents/agent_code_reviewer.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/agents/agent_cpp_reviewer.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/agents/agent_creator_agent.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/agents/agent_golang_reviewer.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/agents/agent_javascript_reviewer.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/agents/agent_manager.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/agents/agent_pack_leader.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/agents/agent_planning.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/agents/agent_python_programmer.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/agents/agent_python_reviewer.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/agents/agent_qa_browser.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/agents/agent_qa_expert.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/agents/agent_scheduler.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/agents/agent_security_auditor.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/agents/agent_terminal_qa.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/agents/agent_typescript_reviewer.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/agents/base_agent.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/agents/event_stream_handler.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/agents/json_agent.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/agents/pack/__init__.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/agents/pack/bloodhound.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/agents/pack/husky.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/agents/pack/retriever.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/agents/pack/shepherd.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/agents/pack/terrier.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/agents/pack/watchdog.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/agents/prompt_reviewer.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/agents/subagent_stream_handler.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/api/__init__.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/api/app.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/api/main.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/api/pty_manager.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/api/routers/__init__.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/api/routers/agents.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/api/routers/commands.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/api/routers/config.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/api/routers/sessions.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/api/templates/terminal.html +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/api/websocket.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/callbacks.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/chatgpt_codex_client.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/cli_runner.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/command_line/__init__.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/command_line/add_model_menu.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/command_line/agent_menu.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/command_line/attachments.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/command_line/autosave_menu.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/command_line/clipboard.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/command_line/colors_menu.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/command_line/command_handler.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/command_line/command_registry.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/command_line/config_commands.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/command_line/core_commands.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/command_line/diff_menu.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/command_line/file_path_completion.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/command_line/load_context_completion.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/command_line/mcp/__init__.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/command_line/mcp/base.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/command_line/mcp/catalog_server_installer.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/command_line/mcp/custom_server_form.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/command_line/mcp/custom_server_installer.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/command_line/mcp/edit_command.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/command_line/mcp/handler.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/command_line/mcp/help_command.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/command_line/mcp/install_command.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/command_line/mcp/install_menu.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/command_line/mcp/list_command.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/command_line/mcp/logs_command.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/command_line/mcp/remove_command.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/command_line/mcp/restart_command.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/command_line/mcp/search_command.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/command_line/mcp/start_all_command.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/command_line/mcp/start_command.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/command_line/mcp/status_command.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/command_line/mcp/stop_all_command.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/command_line/mcp/stop_command.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/command_line/mcp/test_command.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/command_line/mcp/utils.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/command_line/mcp/wizard_utils.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/command_line/mcp_completion.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/command_line/model_picker_completion.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/command_line/model_settings_menu.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/command_line/motd.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/command_line/onboarding_slides.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/command_line/onboarding_wizard.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/command_line/pin_command_completion.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/command_line/prompt_toolkit_completion.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/command_line/session_commands.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/command_line/skills_completion.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/command_line/uc_menu.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/command_line/utils.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/command_line/wiggum_state.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/config.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/error_logging.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/gemini_code_assist.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/gemini_model.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/hook_engine/README.md +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/hook_engine/__init__.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/hook_engine/aliases.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/hook_engine/engine.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/hook_engine/executor.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/hook_engine/matcher.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/hook_engine/models.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/hook_engine/registry.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/hook_engine/validator.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/http_utils.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/keymap.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/main.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/mcp_/__init__.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/mcp_/async_lifecycle.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/mcp_/blocking_startup.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/mcp_/captured_stdio_server.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/mcp_/circuit_breaker.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/mcp_/config_wizard.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/mcp_/dashboard.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/mcp_/error_isolation.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/mcp_/examples/retry_example.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/mcp_/health_monitor.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/mcp_/managed_server.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/mcp_/manager.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/mcp_/mcp_logs.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/mcp_/registry.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/mcp_/retry_manager.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/mcp_/server_registry_catalog.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/mcp_/status_tracker.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/mcp_/system_tools.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/mcp_prompts/__init__.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/mcp_prompts/hook_creator.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/messaging/__init__.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/messaging/bus.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/messaging/commands.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/messaging/markdown_patches.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/messaging/message_queue.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/messaging/messages.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/messaging/queue_console.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/messaging/renderers.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/messaging/rich_renderer.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/messaging/spinner/__init__.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/messaging/spinner/console_spinner.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/messaging/spinner/spinner_base.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/messaging/subagent_console.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/model_factory.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/model_switching.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/model_utils.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/models.json +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/models_dev_api.json +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/models_dev_parser.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/plugins/__init__.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/plugins/agent_skills/__init__.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/plugins/agent_skills/config.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/plugins/agent_skills/discovery.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/plugins/agent_skills/downloader.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/plugins/agent_skills/installer.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/plugins/agent_skills/metadata.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/plugins/agent_skills/prompt_builder.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/plugins/agent_skills/register_callbacks.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/plugins/agent_skills/remote_catalog.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/plugins/agent_skills/skill_catalog.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/plugins/agent_skills/skills_install_menu.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/plugins/agent_skills/skills_menu.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/plugins/antigravity_oauth/__init__.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/plugins/antigravity_oauth/accounts.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/plugins/antigravity_oauth/antigravity_model.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/plugins/antigravity_oauth/config.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/plugins/antigravity_oauth/constants.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/plugins/antigravity_oauth/oauth.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/plugins/antigravity_oauth/register_callbacks.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/plugins/antigravity_oauth/storage.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/plugins/antigravity_oauth/test_plugin.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/plugins/antigravity_oauth/token.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/plugins/antigravity_oauth/transport.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/plugins/antigravity_oauth/utils.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/plugins/chatgpt_oauth/__init__.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/plugins/chatgpt_oauth/config.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/plugins/chatgpt_oauth/oauth_flow.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/plugins/chatgpt_oauth/register_callbacks.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/plugins/chatgpt_oauth/test_plugin.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/plugins/chatgpt_oauth/utils.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/plugins/claude_code_hooks/__init__.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/plugins/claude_code_hooks/config.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/plugins/claude_code_hooks/register_callbacks.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/plugins/claude_code_oauth/README.md +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/plugins/claude_code_oauth/SETUP.md +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/plugins/claude_code_oauth/__init__.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/plugins/claude_code_oauth/config.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/plugins/claude_code_oauth/register_callbacks.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/plugins/claude_code_oauth/test_plugin.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/plugins/claude_code_oauth/token_refresh_heartbeat.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/plugins/claude_code_oauth/utils.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/plugins/customizable_commands/__init__.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/plugins/customizable_commands/register_callbacks.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/plugins/example_custom_command/README.md +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/plugins/example_custom_command/register_callbacks.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/plugins/file_permission_handler/__init__.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/plugins/file_permission_handler/register_callbacks.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/plugins/frontend_emitter/__init__.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/plugins/frontend_emitter/emitter.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/plugins/frontend_emitter/register_callbacks.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/plugins/hook_creator/__init__.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/plugins/hook_creator/register_callbacks.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/plugins/hook_manager/__init__.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/plugins/hook_manager/config.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/plugins/hook_manager/hooks_menu.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/plugins/hook_manager/register_callbacks.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/plugins/oauth_puppy_html.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/plugins/scheduler/__init__.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/plugins/scheduler/register_callbacks.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/plugins/scheduler/scheduler_menu.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/plugins/scheduler/scheduler_wizard.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/plugins/shell_safety/__init__.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/plugins/shell_safety/agent_shell_safety.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/plugins/shell_safety/command_cache.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/plugins/shell_safety/register_callbacks.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/plugins/synthetic_status/__init__.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/plugins/synthetic_status/register_callbacks.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/plugins/synthetic_status/status_api.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/plugins/universal_constructor/__init__.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/plugins/universal_constructor/models.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/plugins/universal_constructor/register_callbacks.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/plugins/universal_constructor/registry.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/plugins/universal_constructor/sandbox.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/prompts/antigravity_system_prompt.md +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/pydantic_patches.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/reopenable_async_client.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/round_robin_model.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/scheduler/__init__.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/scheduler/__main__.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/scheduler/cli.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/scheduler/config.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/scheduler/daemon.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/scheduler/executor.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/scheduler/platform.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/scheduler/platform_unix.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/scheduler/platform_win.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/session_storage.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/status_display.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/summarization_agent.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/terminal_utils.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/tools/__init__.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/tools/agent_tools.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/tools/ask_user_question/__init__.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/tools/ask_user_question/constants.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/tools/ask_user_question/demo_tui.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/tools/ask_user_question/handler.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/tools/ask_user_question/models.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/tools/ask_user_question/registration.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/tools/ask_user_question/renderers.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/tools/ask_user_question/terminal_ui.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/tools/ask_user_question/theme.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/tools/ask_user_question/tui_loop.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/tools/browser/__init__.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/tools/browser/browser_control.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/tools/browser/browser_interactions.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/tools/browser/browser_locators.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/tools/browser/browser_manager.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/tools/browser/browser_navigation.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/tools/browser/browser_screenshot.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/tools/browser/browser_scripts.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/tools/browser/browser_workflows.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/tools/browser/chromium_terminal_manager.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/tools/browser/terminal_command_tools.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/tools/browser/terminal_screenshot_tools.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/tools/browser/terminal_tools.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/tools/command_runner.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/tools/common.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/tools/display.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/tools/file_modifications.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/tools/file_operations.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/tools/scheduler_tools.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/tools/skills_tools.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/tools/subagent_context.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/tools/tools_content.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/tools/universal_constructor.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/uvx_detection.py +0 -0
- {newcode-0.2.4 → newcode-0.2.5}/newcode/version_checker.py +0 -0
|
@@ -371,12 +371,10 @@ class ClaudeCacheAsyncClient(httpx.AsyncClient):
|
|
|
371
371
|
is_auth_error = response.status_code in (401, 403)
|
|
372
372
|
|
|
373
373
|
if response.status_code == 400:
|
|
374
|
-
is_auth_error = self._is_cloudflare_html_error(
|
|
375
|
-
response
|
|
376
|
-
) or self._is_token_expired_error(response)
|
|
374
|
+
is_auth_error = self._is_cloudflare_html_error(response)
|
|
377
375
|
if is_auth_error:
|
|
378
376
|
logger.info(
|
|
379
|
-
"Detected 400
|
|
377
|
+
"Detected Cloudflare 400 error (expired token), attempting token refresh"
|
|
380
378
|
)
|
|
381
379
|
|
|
382
380
|
if is_auth_error:
|
|
@@ -537,79 +535,35 @@ class ClaudeCacheAsyncClient(httpx.AsyncClient):
|
|
|
537
535
|
"""Check if this is a Cloudflare HTML error response.
|
|
538
536
|
|
|
539
537
|
Cloudflare often returns HTML error pages with status 400 when
|
|
540
|
-
there are authentication issues.
|
|
538
|
+
there are authentication issues. The response looks like:
|
|
539
|
+
<html>
|
|
540
|
+
<head><title>400 Bad Request</title></head>
|
|
541
|
+
<body>
|
|
542
|
+
<center><h1>400 Bad Request</h1></center>
|
|
543
|
+
<hr><center>cloudflare</center>
|
|
544
|
+
</body>
|
|
545
|
+
</html>
|
|
541
546
|
"""
|
|
542
|
-
# Check content type
|
|
543
|
-
content_type = response.headers.get("content-type", "")
|
|
544
|
-
if "text/html" not in content_type.lower():
|
|
545
|
-
return False
|
|
546
|
-
|
|
547
|
-
# Check if body contains Cloudflare markers
|
|
548
547
|
try:
|
|
549
|
-
|
|
548
|
+
body = None
|
|
549
|
+
# Try reading the body from _content first (already consumed)
|
|
550
550
|
if hasattr(response, "_content") and response._content:
|
|
551
551
|
body = response._content.decode("utf-8", errors="ignore")
|
|
552
552
|
else:
|
|
553
|
-
# Try to read the text (this might be already consumed)
|
|
554
553
|
try:
|
|
555
554
|
body = response.text
|
|
556
555
|
except Exception:
|
|
557
556
|
return False
|
|
558
557
|
|
|
559
|
-
|
|
558
|
+
if not body:
|
|
559
|
+
return False
|
|
560
|
+
|
|
560
561
|
body_lower = body.lower()
|
|
561
562
|
return "cloudflare" in body_lower and "400 bad request" in body_lower
|
|
562
563
|
except Exception as exc:
|
|
563
564
|
logger.debug("Error checking for Cloudflare error: %s", exc)
|
|
564
565
|
return False
|
|
565
566
|
|
|
566
|
-
@staticmethod
|
|
567
|
-
def _is_token_expired_error(response: httpx.Response) -> bool:
|
|
568
|
-
"""Check if a 400 response indicates an expired or invalid OAuth token.
|
|
569
|
-
|
|
570
|
-
The Anthropic API returns JSON 400 errors when the token is expired.
|
|
571
|
-
Also checks stored token expiry as a heuristic.
|
|
572
|
-
"""
|
|
573
|
-
try:
|
|
574
|
-
# Check if the JSON body mentions auth/token issues
|
|
575
|
-
body = None
|
|
576
|
-
if hasattr(response, "_content") and response._content:
|
|
577
|
-
body = response._content.decode("utf-8", errors="ignore")
|
|
578
|
-
else:
|
|
579
|
-
try:
|
|
580
|
-
body = response.text
|
|
581
|
-
except Exception:
|
|
582
|
-
pass
|
|
583
|
-
|
|
584
|
-
if body:
|
|
585
|
-
body_lower = body.lower()
|
|
586
|
-
auth_markers = (
|
|
587
|
-
"expired",
|
|
588
|
-
"invalid_token",
|
|
589
|
-
"invalid_grant",
|
|
590
|
-
"token",
|
|
591
|
-
"unauthorized",
|
|
592
|
-
"authentication",
|
|
593
|
-
)
|
|
594
|
-
if any(marker in body_lower for marker in auth_markers):
|
|
595
|
-
return True
|
|
596
|
-
|
|
597
|
-
# Fallback: check if our stored token is actually expired
|
|
598
|
-
from newcode.plugins.claude_code_oauth.utils import (
|
|
599
|
-
is_token_expired,
|
|
600
|
-
load_stored_tokens,
|
|
601
|
-
)
|
|
602
|
-
|
|
603
|
-
tokens = load_stored_tokens()
|
|
604
|
-
if tokens and is_token_expired(tokens):
|
|
605
|
-
logger.info("Stored token is expired, treating 400 as auth error")
|
|
606
|
-
return True
|
|
607
|
-
|
|
608
|
-
except Exception as exc:
|
|
609
|
-
logger.debug("Error checking for token expired error: %s", exc)
|
|
610
|
-
|
|
611
|
-
return False
|
|
612
|
-
|
|
613
567
|
def _refresh_claude_oauth_token(self) -> str | None:
|
|
614
568
|
try:
|
|
615
569
|
from newcode.plugins.claude_code_oauth.utils import refresh_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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|