code-puppy 0.0.783__tar.gz → 0.0.784__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.783 → code_puppy-0.0.784}/PKG-INFO +1 -1
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/callbacks.py +40 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/command_line/add_model_menu.py +19 -1
- {code_puppy-0.0.783 → code_puppy-0.0.784}/pyproject.toml +1 -1
- {code_puppy-0.0.783 → code_puppy-0.0.784}/.gitignore +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/LICENSE +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/README.md +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/__init__.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/__main__.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/agent_execution_context.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/agents/__init__.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/agents/_builder.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/agents/_compaction.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/agents/_diagnostics.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/agents/_history.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/agents/_key_listeners.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/agents/_model_message_transform.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/agents/_non_streaming_render.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/agents/_output_limits.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/agents/_run_signals.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/agents/_runtime.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/agents/_steer_processor.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/agents/_subagent_recursion.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/agents/agent_code_puppy.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/agents/agent_creator_agent.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/agents/agent_helios.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/agents/agent_manager.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/agents/agent_model_judge.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/agents/agent_planning.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/agents/agent_qa_kitten.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/agents/agent_web_retriever.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/agents/base_agent.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/agents/event_stream_handler.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/agents/json_agent.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/agents/retry_profiles.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/agents/run_stats.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/agents/smooth_stream.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/agents/subagent_stream_handler.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/atomic_io.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/atomic_json.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/chatgpt_codex_client.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/claude_cache_client.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/cli_runner.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/command_line/__init__.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/command_line/add_model_details.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/command_line/agent_menu.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/command_line/attachments.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/command_line/autosave_menu.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/command_line/autosave_search.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/command_line/clipboard.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/command_line/colors_menu.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/command_line/command_handler.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/command_line/command_registry.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/command_line/completers.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/command_line/completion_cache.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/command_line/config_apply.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/command_line/config_commands.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/command_line/core_commands.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/command_line/file_index.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/command_line/file_path_completion.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/command_line/help_catalog.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/command_line/help_overlay.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/command_line/image_utils.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/command_line/load_context_completion.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/command_line/mcp/__init__.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/command_line/mcp/base.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/command_line/mcp/catalog_server_installer.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/command_line/mcp/custom_server_form.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/command_line/mcp/custom_server_installer.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/command_line/mcp/edit_command.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/command_line/mcp/handler.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/command_line/mcp/help_command.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/command_line/mcp/install_command.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/command_line/mcp/install_menu.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/command_line/mcp/list_command.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/command_line/mcp/logs_command.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/command_line/mcp/mcp_servers_store.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/command_line/mcp/remove_command.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/command_line/mcp/restart_command.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/command_line/mcp/search_command.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/command_line/mcp/silence_warning_command.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/command_line/mcp/start_all_command.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/command_line/mcp/start_command.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/command_line/mcp/status_command.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/command_line/mcp/stop_all_command.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/command_line/mcp/stop_command.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/command_line/mcp/trust_command.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/command_line/mcp/utils.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/command_line/mcp/wizard_utils.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/command_line/mcp_binding_menu.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/command_line/mcp_completion.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/command_line/menu_session.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/command_line/model_picker_completion.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/command_line/model_settings_defs.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/command_line/model_settings_menu.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/command_line/onboarding_slides.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/command_line/onboarding_wizard.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/command_line/pagination.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/command_line/pin_command_completion.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/command_line/session_browser.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/command_line/session_browser_data.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/command_line/session_commands.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/command_line/set_menu.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/command_line/set_menu_catalog.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/command_line/set_menu_schema.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/command_line/set_menu_settings.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/command_line/set_menu_shims.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/command_line/set_menu_values.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/command_line/shell_passthrough.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/command_line/skills_completion.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/command_line/tui_style.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/command_line/uc_menu.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/command_line/utils.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/config.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/config_file.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/error_logging.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/gemini_code_assist.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/gemini_model.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/hook_engine/README.md +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/hook_engine/__init__.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/hook_engine/aliases.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/hook_engine/engine.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/hook_engine/executor.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/hook_engine/matcher.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/hook_engine/models.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/hook_engine/registry.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/hook_engine/validator.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/http_utils.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/i18n/__init__.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/i18n/audit.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/i18n/catalog.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/i18n/formats.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/i18n/locale.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/i18n/locales/en-US.json +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/i18n/locales/es.json +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/i18n/locales/fr-CA.json +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/i18n/plurals.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/i18n/pseudo.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/i18n/translate.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/kennel_provider.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/keymap.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/list_filtering.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/main.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/mcp_/__init__.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/mcp_/agent_bindings.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/mcp_/async_lifecycle.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/mcp_/blocking_startup.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/mcp_/circuit_breaker.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/mcp_/config_wizard.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/mcp_/dashboard.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/mcp_/error_isolation.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/mcp_/examples/retry_example.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/mcp_/health_monitor.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/mcp_/managed_server.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/mcp_/manager.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/mcp_/mcp_logs.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/mcp_/project_config.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/mcp_/registry.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/mcp_/retry_manager.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/mcp_/server_registry_catalog.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/mcp_/status_tracker.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/mcp_/system_tools.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/mcp_/tool_arg_coercion.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/mcp_/toolset_utils.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/mcp_prompts/__init__.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/mcp_prompts/hook_creator.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/messaging/__init__.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/messaging/bar_painters.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/messaging/bar_rendering.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/messaging/bottom_bar.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/messaging/bus.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/messaging/chords.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/messaging/commands.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/messaging/editor_actions.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/messaging/editor_completion.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/messaging/editor_display.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/messaging/editor_history.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/messaging/editor_keys.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/messaging/editor_paste.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/messaging/external_editor.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/messaging/inline_bar.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/messaging/line_editor.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/messaging/markdown_patches.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/messaging/message_queue.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/messaging/messages.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/messaging/pause_controller.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/messaging/prompt_prefix_style.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/messaging/queue_console.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/messaging/renderers.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/messaging/rich_renderer.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/messaging/run_ui.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/messaging/run_ui_wiring.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/messaging/spinner/__init__.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/messaging/subagent_console.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/messaging/transcript_guard.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/model_descriptions.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/model_factory.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/model_switching.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/model_utils.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/models.json +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/models_dev_api.json +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/models_dev_parser.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/observability.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/platform_utils.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/plugins/__init__.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/plugins/config.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/plugins/oauth_pasteback.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/plugins/oauth_puppy_html.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/plugins/trust.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/plugins/trust_notice.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/provider_credentials.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/provider_identity.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/pydantic_patches.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/reopenable_async_client.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/round_robin_model.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/secret_store.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/secret_store_backends.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/session_format_migration.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/session_lifecycle.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/session_migration.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/session_storage.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/session_surrogate_unpickler.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/skill_provider.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/splash.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/status_display.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/terminal_utils.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/token_usage.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/tools/__init__.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/tools/agent_tools.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/tools/ask_user_question/__init__.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/tools/ask_user_question/constants.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/tools/ask_user_question/demo_tui.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/tools/ask_user_question/handler.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/tools/ask_user_question/models.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/tools/ask_user_question/registration.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/tools/ask_user_question/renderers.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/tools/ask_user_question/terminal_ui.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/tools/ask_user_question/theme.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/tools/ask_user_question/tui_loop.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/tools/browser/__init__.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/tools/browser/browser_control.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/tools/browser/browser_interactions.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/tools/browser/browser_locator_resolver.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/tools/browser/browser_locators.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/tools/browser/browser_manager.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/tools/browser/browser_navigation.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/tools/browser/browser_page_snapshot.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/tools/browser/browser_screenshot.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/tools/browser/browser_scripts.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/tools/browser/browser_semantic_interactions.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/tools/browser/browser_workflows.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/tools/browser/tool_registry.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/tools/command_runner.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/tools/common.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/tools/display.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/tools/file_modifications.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/tools/file_operations.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/tools/file_permission_state.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/tools/fs_access.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/tools/image_tools.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/tools/io_backends.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/tools/model_tools.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/tools/shell_backgrounding.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/tools/skills_tools.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/tools/subagent_context.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/tools/subagent_invocation.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/tools/subagent_usage_metrics.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/tools/tools_content.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/tools/universal_constructor.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/undo_manager.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/universal_constructor_provider.py +0 -0
- {code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/version_checker.py +0 -0
|
@@ -49,6 +49,7 @@ PhaseType = Literal[
|
|
|
49
49
|
"agent_run_end",
|
|
50
50
|
"agent_run_result",
|
|
51
51
|
"model_select",
|
|
52
|
+
"provider_credential_flow",
|
|
52
53
|
"register_mcp_catalog_servers",
|
|
53
54
|
"register_browser_types",
|
|
54
55
|
"register_model_providers",
|
|
@@ -138,6 +139,7 @@ _callbacks: Dict[PhaseType, List[CallbackFunc]] = {
|
|
|
138
139
|
"agent_run_end": [],
|
|
139
140
|
"agent_run_result": [],
|
|
140
141
|
"model_select": [],
|
|
142
|
+
"provider_credential_flow": [],
|
|
141
143
|
"register_mcp_catalog_servers": [],
|
|
142
144
|
"register_browser_types": [],
|
|
143
145
|
"register_model_providers": [],
|
|
@@ -1225,6 +1227,44 @@ def on_model_select(
|
|
|
1225
1227
|
return None
|
|
1226
1228
|
|
|
1227
1229
|
|
|
1230
|
+
def on_provider_credential_flow(*, provider_id: str, env_var: str) -> bool:
|
|
1231
|
+
"""Ask plugins to acquire a missing provider credential.
|
|
1232
|
+
|
|
1233
|
+
Fired by the ``/add_model`` flow for each required env var that is not
|
|
1234
|
+
set, before falling back to manual key entry. A plugin that can mint the
|
|
1235
|
+
credential itself (e.g. an OAuth flow that exchanges an authorization
|
|
1236
|
+
code for an API key) should persist it so it takes effect immediately
|
|
1237
|
+
(config + ``os.environ``) and return ``True``. Return ``None``/``False``
|
|
1238
|
+
to defer to manual entry.
|
|
1239
|
+
|
|
1240
|
+
Unlike most hooks this one deliberately short-circuits: callbacks run
|
|
1241
|
+
interactive, side-effectful flows, so the first one to return ``True``
|
|
1242
|
+
wins and the rest are never invoked. Callbacks must gate on
|
|
1243
|
+
``provider_id``/``env_var`` and return ``None`` immediately for
|
|
1244
|
+
providers they do not own.
|
|
1245
|
+
|
|
1246
|
+
Args:
|
|
1247
|
+
provider_id: models.dev provider id (e.g. ``"openrouter"``).
|
|
1248
|
+
env_var: The credential env var being requested.
|
|
1249
|
+
|
|
1250
|
+
Returns:
|
|
1251
|
+
True when a callback reports the credential as acquired.
|
|
1252
|
+
"""
|
|
1253
|
+
for callback in get_callbacks("provider_credential_flow"):
|
|
1254
|
+
try:
|
|
1255
|
+
result = callback(provider_id=provider_id, env_var=env_var)
|
|
1256
|
+
except Exception as e:
|
|
1257
|
+
logger.error(
|
|
1258
|
+
f"Callback {getattr(callback, '__name__', callback)!r} failed "
|
|
1259
|
+
f"in phase 'provider_credential_flow': {e}\n"
|
|
1260
|
+
f"{traceback.format_exc()}"
|
|
1261
|
+
)
|
|
1262
|
+
continue
|
|
1263
|
+
if result is True:
|
|
1264
|
+
return True
|
|
1265
|
+
return False
|
|
1266
|
+
|
|
1267
|
+
|
|
1228
1268
|
async def on_agent_run_end(
|
|
1229
1269
|
agent_name: str,
|
|
1230
1270
|
model_name: str,
|
|
@@ -346,16 +346,34 @@ def _text_input(title: str, **kwargs):
|
|
|
346
346
|
return builder
|
|
347
347
|
|
|
348
348
|
|
|
349
|
+
def _plugin_credential_flow(provider: ProviderInfo, env_var: str) -> bool:
|
|
350
|
+
"""Give plugins first crack at acquiring a missing credential.
|
|
351
|
+
|
|
352
|
+
A plugin (e.g. an OAuth flow that exchanges a code for an API key) saves
|
|
353
|
+
the credential itself and returns True via the ``provider_credential_flow``
|
|
354
|
+
hook. Trust but verify: the env var must actually be set afterwards,
|
|
355
|
+
otherwise we fall back to manual entry anyway.
|
|
356
|
+
"""
|
|
357
|
+
from code_puppy.callbacks import on_provider_credential_flow
|
|
358
|
+
|
|
359
|
+
handled = on_provider_credential_flow(provider_id=provider.id, env_var=env_var)
|
|
360
|
+
return bool(handled and os.environ.get(env_var))
|
|
361
|
+
|
|
362
|
+
|
|
349
363
|
def prompt_for_credentials(provider: ProviderInfo, **overrides) -> bool:
|
|
350
364
|
"""Prompt for each missing credential. Empty skips; Esc cancels all.
|
|
351
365
|
|
|
352
|
-
|
|
366
|
+
Plugins get first crack via the ``provider_credential_flow`` hook (e.g.
|
|
367
|
+
browser OAuth); anything unhandled falls back to manual entry, which
|
|
368
|
+
saves via config + os.environ so the key is immediately usable.
|
|
353
369
|
"""
|
|
354
370
|
missing = missing_env_vars(provider)
|
|
355
371
|
if not missing:
|
|
356
372
|
emit_info(t("model_menu.credentials.all_set", provider=provider.name))
|
|
357
373
|
return True
|
|
358
374
|
for env_var in missing:
|
|
375
|
+
if _plugin_credential_flow(provider, env_var):
|
|
376
|
+
continue
|
|
359
377
|
result = (
|
|
360
378
|
_text_input(
|
|
361
379
|
f"{provider.name}: {env_var}",
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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.783 → code_puppy-0.0.784}/code_puppy/command_line/load_context_completion.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{code_puppy-0.0.783 → code_puppy-0.0.784}/code_puppy/command_line/mcp/catalog_server_installer.py
RENAMED
|
File without changes
|
|
File without changes
|
{code_puppy-0.0.783 → code_puppy-0.0.784}/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
|
{code_puppy-0.0.783 → code_puppy-0.0.784}/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
|
|
File without changes
|
|
File without changes
|
{code_puppy-0.0.783 → code_puppy-0.0.784}/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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|