code-puppy 0.0.586__tar.gz → 0.0.587__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.586 → code_puppy-0.0.587}/PKG-INFO +1 -1
- code_puppy-0.0.587/code_puppy/plugins/btw/__init__.py +1 -0
- code_puppy-0.0.587/code_puppy/plugins/btw/inline_view.py +135 -0
- code_puppy-0.0.587/code_puppy/plugins/btw/register_callbacks.py +106 -0
- code_puppy-0.0.587/code_puppy/plugins/btw/side_query.py +91 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/pyproject.toml +1 -1
- {code_puppy-0.0.586 → code_puppy-0.0.587}/.gitignore +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/LICENSE +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/README.md +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/__init__.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/__main__.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/agents/__init__.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/agents/_builder.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/agents/_compaction.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/agents/_diagnostics.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/agents/_history.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/agents/_key_listeners.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/agents/_non_streaming_render.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/agents/_run_signals.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/agents/_runtime.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/agents/_steer_processor.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/agents/agent_code_puppy.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/agents/agent_creator_agent.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/agents/agent_helios.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/agents/agent_manager.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/agents/agent_planning.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/agents/agent_qa_kitten.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/agents/base_agent.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/agents/event_stream_handler.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/agents/json_agent.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/agents/run_stats.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/agents/smooth_stream.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/agents/subagent_stream_handler.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/callbacks.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/chatgpt_codex_client.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/claude_cache_client.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/cli_runner.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/command_line/__init__.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/command_line/add_model_menu.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/command_line/agent_menu.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/command_line/attachments.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/command_line/autosave_menu.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/command_line/autosave_search.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/command_line/clipboard.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/command_line/colors_menu.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/command_line/command_handler.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/command_line/command_registry.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/command_line/config_apply.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/command_line/config_commands.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/command_line/core_commands.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/command_line/diff_menu.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/command_line/file_index.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/command_line/file_path_completion.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/command_line/judges_menu.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/command_line/load_context_completion.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/command_line/mcp/__init__.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/command_line/mcp/base.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/command_line/mcp/catalog_server_installer.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/command_line/mcp/custom_server_form.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/command_line/mcp/custom_server_installer.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/command_line/mcp/edit_command.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/command_line/mcp/handler.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/command_line/mcp/help_command.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/command_line/mcp/install_command.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/command_line/mcp/install_menu.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/command_line/mcp/list_command.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/command_line/mcp/logs_command.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/command_line/mcp/remove_command.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/command_line/mcp/restart_command.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/command_line/mcp/search_command.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/command_line/mcp/silence_warning_command.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/command_line/mcp/start_all_command.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/command_line/mcp/start_command.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/command_line/mcp/status_command.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/command_line/mcp/stop_all_command.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/command_line/mcp/stop_command.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/command_line/mcp/utils.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/command_line/mcp/wizard_utils.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/command_line/mcp_binding_menu.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/command_line/mcp_completion.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/command_line/model_picker_completion.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/command_line/model_settings_menu.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/command_line/onboarding_slides.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/command_line/onboarding_wizard.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/command_line/pagination.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/command_line/pin_command_completion.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/command_line/prompt_toolkit_completion.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/command_line/session_commands.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/command_line/set_menu.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/command_line/set_menu_catalog.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/command_line/set_menu_render.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/command_line/set_menu_schema.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/command_line/set_menu_settings.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/command_line/set_menu_shims.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/command_line/set_menu_values.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/command_line/shell_passthrough.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/command_line/skills_completion.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/command_line/uc_menu.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/command_line/utils.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/command_line/wiggum_state.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/config.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/error_logging.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/gemini_code_assist.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/gemini_model.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/hook_engine/README.md +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/hook_engine/__init__.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/hook_engine/aliases.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/hook_engine/engine.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/hook_engine/executor.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/hook_engine/matcher.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/hook_engine/models.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/hook_engine/registry.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/hook_engine/validator.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/http_utils.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/keymap.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/list_filtering.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/main.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/mcp_/__init__.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/mcp_/agent_bindings.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/mcp_/async_lifecycle.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/mcp_/blocking_startup.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/mcp_/captured_stdio_server.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/mcp_/circuit_breaker.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/mcp_/config_wizard.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/mcp_/dashboard.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/mcp_/error_isolation.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/mcp_/examples/retry_example.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/mcp_/health_monitor.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/mcp_/managed_server.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/mcp_/manager.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/mcp_/mcp_logs.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/mcp_/registry.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/mcp_/retry_manager.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/mcp_/server_registry_catalog.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/mcp_/status_tracker.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/mcp_/system_tools.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/mcp_/tool_arg_coercion.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/mcp_prompts/__init__.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/mcp_prompts/hook_creator.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/messaging/__init__.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/messaging/bar_painters.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/messaging/bar_rendering.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/messaging/bottom_bar.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/messaging/bus.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/messaging/commands.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/messaging/editor_actions.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/messaging/editor_completion.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/messaging/editor_history.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/messaging/editor_keys.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/messaging/editor_paste.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/messaging/line_editor.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/messaging/markdown_patches.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/messaging/message_queue.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/messaging/messages.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/messaging/pause_controller.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/messaging/prompt_prefix_style.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/messaging/queue_console.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/messaging/renderers.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/messaging/rich_renderer.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/messaging/run_ui.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/messaging/run_ui_wiring.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/messaging/spinner/__init__.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/messaging/subagent_console.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/model_descriptions.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/model_factory.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/model_switching.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/model_utils.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/models.json +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/models_dev_api.json +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/models_dev_parser.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/__init__.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/agent_skills/__init__.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/agent_skills/config.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/agent_skills/discovery.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/agent_skills/downloader.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/agent_skills/enabled_skills.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/agent_skills/installer.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/agent_skills/metadata.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/agent_skills/prompt_builder.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/agent_skills/register_callbacks.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/agent_skills/remote_catalog.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/agent_skills/skill_catalog.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/agent_skills/skill_commands.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/agent_skills/skills_install_menu.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/agent_skills/skills_menu.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/aws_bedrock/__init__.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/aws_bedrock/config.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/aws_bedrock/register_callbacks.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/aws_bedrock/utils.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/azure_foundry/README.md +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/azure_foundry/__init__.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/azure_foundry/config.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/azure_foundry/discovery.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/azure_foundry/register_callbacks.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/azure_foundry/token.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/azure_foundry/utils.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/chatgpt_oauth/__init__.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/chatgpt_oauth/config.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/chatgpt_oauth/oauth_flow.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/chatgpt_oauth/register_callbacks.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/chatgpt_oauth/test_plugin.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/chatgpt_oauth/utils.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/claude_code_hooks/__init__.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/claude_code_hooks/config.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/claude_code_hooks/register_callbacks.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/claude_code_oauth/README.md +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/claude_code_oauth/SETUP.md +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/claude_code_oauth/__init__.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/claude_code_oauth/config.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/claude_code_oauth/fast_mode.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/claude_code_oauth/prompt_handler.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/claude_code_oauth/register_callbacks.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/claude_code_oauth/test_fast_mode.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/claude_code_oauth/test_plugin.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/claude_code_oauth/token_refresh_heartbeat.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/claude_code_oauth/utils.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/code_puppy_agent/SKILL.md +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/code_puppy_agent/__init__.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/code_puppy_agent/register_callbacks.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/config.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/context_indicator/__init__.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/context_indicator/register_callbacks.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/context_indicator/usage.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/copilot_auth/__init__.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/copilot_auth/config.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/copilot_auth/reasoning_client.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/copilot_auth/register_callbacks.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/copilot_auth/utils.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/customizable_commands/__init__.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/customizable_commands/register_callbacks.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/dbos_durable_exec/__init__.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/dbos_durable_exec/cancel.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/dbos_durable_exec/commands.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/dbos_durable_exec/config.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/dbos_durable_exec/lifecycle.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/dbos_durable_exec/register_callbacks.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/dbos_durable_exec/runtime.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/dbos_durable_exec/startup_lock.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/dbos_durable_exec/workflow_ids.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/dbos_durable_exec/wrapper.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/destructive_command_guard/__init__.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/destructive_command_guard/detector.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/destructive_command_guard/register_callbacks.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/emoji_filter/__init__.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/emoji_filter/config.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/emoji_filter/register_callbacks.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/emoji_filter/stripper.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/example_custom_command/README.md +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/example_custom_command/register_callbacks.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/file_permission_handler/__init__.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/file_permission_handler/register_callbacks.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/force_push_guard/__init__.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/force_push_guard/detector.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/force_push_guard/register_callbacks.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/force_push_guard/test_detector.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/frontend_emitter/__init__.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/frontend_emitter/emitter.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/frontend_emitter/register_callbacks.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/frontend_emitter/session_context.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/hook_creator/__init__.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/hook_creator/register_callbacks.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/hook_manager/__init__.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/hook_manager/config.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/hook_manager/hooks_menu.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/hook_manager/register_callbacks.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/oauth_puppy_html.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/obsidian_agent/README.md +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/obsidian_agent/__init__.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/obsidian_agent/agent_obsidian.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/obsidian_agent/register_callbacks.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/ollama/__init__.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/ollama/register_callbacks.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/ollama_setup/__init__.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/ollama_setup/completer.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/ollama_setup/register_callbacks.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/plugin_list/__init__.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/plugin_list/plugin_contributions.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/plugin_list/plugin_meta.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/plugin_list/plugin_text_utils.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/plugin_list/plugins_menu.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/plugin_list/plugins_menu_render.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/plugin_list/register_callbacks.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/pop_command/__init__.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/pop_command/register_callbacks.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/prompt_newline/__init__.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/prompt_newline/config.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/prompt_newline/register_callbacks.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/prune/__init__.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/prune/prune_menu.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/prune/prune_model.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/prune/prune_render.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/prune/register_callbacks.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/puppy_kennel/README.md +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/puppy_kennel/__init__.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/puppy_kennel/commands.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/puppy_kennel/config.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/puppy_kennel/kennel.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/puppy_kennel/packer.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/puppy_kennel/recorder.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/puppy_kennel/register_callbacks.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/puppy_kennel/retriever.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/puppy_kennel/schema.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/puppy_kennel/state.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/puppy_kennel/tools.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/puppy_kennel/wings.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/puppy_spinner/__init__.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/puppy_spinner/register_callbacks.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/quick_resume/__init__.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/quick_resume/register_callbacks.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/review_pr/__init__.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/review_pr/register_callbacks.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/shell_safety/__init__.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/shell_safety/agent_shell_safety.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/shell_safety/command_cache.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/shell_safety/register_callbacks.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/statusline/__init__.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/statusline/config.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/statusline/payload.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/statusline/prompt_patch.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/statusline/register_callbacks.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/statusline/runner.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/statusline/statusline_command.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/steer_queue/__init__.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/steer_queue/queue_menu.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/steer_queue/register_callbacks.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/subagent_panel/README.md +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/subagent_panel/__init__.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/subagent_panel/coalesce_patch.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/subagent_panel/panel_render.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/subagent_panel/register_callbacks.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/subagent_panel/resume_repaint.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/subagent_panel/state.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/switch_agent_resume/__init__.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/switch_agent_resume/register_callbacks.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/theme/README.md +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/theme/__init__.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/theme/bundled_palettes.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/theme/content_styles.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/theme/osc_palette.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/theme/picker.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/theme/register_callbacks.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/theme/rich_themes.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/theme/themes.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/token_ratio_learner/__init__.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/token_ratio_learner/ratios.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/token_ratio_learner/register_callbacks.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/universal_constructor/__init__.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/universal_constructor/models.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/universal_constructor/register_callbacks.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/universal_constructor/registry.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/universal_constructor/sandbox.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/wide_completion_menu/__init__.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/wide_completion_menu/register_callbacks.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/wiggum/__init__.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/wiggum/judge.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/wiggum/judge_config.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/wiggum/register_callbacks.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/plugins/wiggum/state.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/provider_credentials.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/provider_identity.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/pydantic_patches.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/reopenable_async_client.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/round_robin_model.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/session_lifecycle.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/session_migration.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/session_storage.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/status_display.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/summarization_agent.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/terminal_utils.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/tools/__init__.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/tools/agent_tools.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/tools/ask_user_question/__init__.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/tools/ask_user_question/constants.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/tools/ask_user_question/demo_tui.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/tools/ask_user_question/handler.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/tools/ask_user_question/models.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/tools/ask_user_question/registration.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/tools/ask_user_question/renderers.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/tools/ask_user_question/terminal_ui.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/tools/ask_user_question/theme.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/tools/ask_user_question/tui_loop.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/tools/browser/__init__.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/tools/browser/browser_control.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/tools/browser/browser_interactions.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/tools/browser/browser_locators.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/tools/browser/browser_manager.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/tools/browser/browser_navigation.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/tools/browser/browser_screenshot.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/tools/browser/browser_scripts.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/tools/browser/browser_workflows.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/tools/command_runner.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/tools/common.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/tools/display.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/tools/file_modifications.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/tools/file_operations.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/tools/image_tools.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/tools/model_tools.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/tools/skills_tools.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/tools/subagent_context.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/tools/subagent_invocation.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/tools/tools_content.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/tools/universal_constructor.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/undo_manager.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/uvx_detection.py +0 -0
- {code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/version_checker.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""/btw — quick side questions without polluting the main conversation."""
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
"""Inline rendering for `/btw` answers (Claude Code style).
|
|
2
|
+
|
|
3
|
+
Why direct console writes instead of ``emit_info``: the `/btw` handler
|
|
4
|
+
blocks the main event loop while the side query runs, which starves the
|
|
5
|
+
async transcript renderer — queued messages would only paint *after*
|
|
6
|
+
the handler returns. Every slash command already executes under
|
|
7
|
+
``suspended_run_ui`` (idle and mid-run), so the terminal is ours for
|
|
8
|
+
the duration; printing straight to it is the same trick the TUI menus
|
|
9
|
+
use.
|
|
10
|
+
|
|
11
|
+
The dismiss-wait is load-bearing mid-run: the agent stays parked at its
|
|
12
|
+
pause boundary until the user dismisses (or the timeout fires), so the
|
|
13
|
+
resuming stream can't immediately scroll the answer away.
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
from __future__ import annotations
|
|
17
|
+
|
|
18
|
+
import logging
|
|
19
|
+
import os
|
|
20
|
+
import sys
|
|
21
|
+
import time
|
|
22
|
+
|
|
23
|
+
logger = logging.getLogger(__name__)
|
|
24
|
+
|
|
25
|
+
DISMISS_TIMEOUT_S = 120.0
|
|
26
|
+
_DISMISS_KEYS = (b" ", b"\r", b"\n", b"\x1b")
|
|
27
|
+
_HINT = "Press Space, Enter, or Escape to dismiss"
|
|
28
|
+
_INDENT = (0, 0, 0, 2) # answer block: two-cell left inset
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def is_tty() -> bool:
|
|
32
|
+
if os.getenv("CODE_PUPPY_NO_TUI") == "1":
|
|
33
|
+
return False
|
|
34
|
+
try:
|
|
35
|
+
return sys.stdin.isatty() and sys.stdout.isatty()
|
|
36
|
+
except Exception:
|
|
37
|
+
return False
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def _console():
|
|
41
|
+
from rich.console import Console
|
|
42
|
+
|
|
43
|
+
return Console()
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def show_asking(question: str, model_name: str) -> None:
|
|
47
|
+
"""Echo the question and a progress line before the query blocks."""
|
|
48
|
+
from rich.markup import escape
|
|
49
|
+
|
|
50
|
+
console = _console()
|
|
51
|
+
console.print()
|
|
52
|
+
console.print(f"[bold yellow]/btw[/bold yellow] [dim]{escape(question)}[/dim]")
|
|
53
|
+
console.print(f" [dim]thinking ({escape(model_name)})...[/dim]")
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
def show_answer(answer: str) -> None:
|
|
57
|
+
"""Render the answer inline as Markdown, plus the dismiss hint."""
|
|
58
|
+
from rich.markdown import Markdown
|
|
59
|
+
from rich.padding import Padding
|
|
60
|
+
|
|
61
|
+
console = _console()
|
|
62
|
+
console.print()
|
|
63
|
+
console.print(Padding(Markdown(answer), _INDENT))
|
|
64
|
+
console.print()
|
|
65
|
+
console.print(f" [dim]{_HINT}[/dim]")
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
def wait_for_dismiss(timeout_s: float = DISMISS_TIMEOUT_S) -> None:
|
|
69
|
+
"""Block until Space / Enter / Esc, or auto-dismiss on timeout.
|
|
70
|
+
|
|
71
|
+
Never raises. Skips waiting entirely when a raw key can't be read
|
|
72
|
+
(no termios/msvcrt, weird stdin) — better to resume than to hang.
|
|
73
|
+
"""
|
|
74
|
+
if not is_tty():
|
|
75
|
+
return
|
|
76
|
+
try:
|
|
77
|
+
_wait_key_posix(timeout_s)
|
|
78
|
+
return
|
|
79
|
+
except ImportError:
|
|
80
|
+
pass
|
|
81
|
+
except Exception:
|
|
82
|
+
logger.debug("btw: posix key wait failed", exc_info=True)
|
|
83
|
+
return
|
|
84
|
+
try:
|
|
85
|
+
_wait_key_windows(timeout_s)
|
|
86
|
+
except Exception:
|
|
87
|
+
logger.debug("btw: windows key wait failed", exc_info=True)
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
def _wait_key_posix(timeout_s: float) -> None:
|
|
91
|
+
import select
|
|
92
|
+
import termios
|
|
93
|
+
import tty
|
|
94
|
+
|
|
95
|
+
fd = sys.stdin.fileno()
|
|
96
|
+
old = termios.tcgetattr(fd)
|
|
97
|
+
try:
|
|
98
|
+
tty.setcbreak(fd)
|
|
99
|
+
deadline = time.monotonic() + timeout_s
|
|
100
|
+
while True:
|
|
101
|
+
remaining = deadline - time.monotonic()
|
|
102
|
+
if remaining <= 0:
|
|
103
|
+
return
|
|
104
|
+
ready, _, _ = select.select([fd], [], [], min(remaining, 0.5))
|
|
105
|
+
if ready and os.read(fd, 1) in _DISMISS_KEYS:
|
|
106
|
+
return
|
|
107
|
+
finally:
|
|
108
|
+
termios.tcsetattr(fd, termios.TCSADRAIN, old)
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
def _wait_key_windows(timeout_s: float) -> None:
|
|
112
|
+
import msvcrt
|
|
113
|
+
|
|
114
|
+
deadline = time.monotonic() + timeout_s
|
|
115
|
+
while time.monotonic() < deadline:
|
|
116
|
+
if msvcrt.kbhit() and msvcrt.getch() in _DISMISS_KEYS:
|
|
117
|
+
return
|
|
118
|
+
time.sleep(0.05)
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
def emit_fallback(question: str, answer: str) -> None:
|
|
122
|
+
"""Non-TTY path: plain transcript message via the message queue."""
|
|
123
|
+
from code_puppy.messaging import emit_info
|
|
124
|
+
|
|
125
|
+
emit_info(f"/btw {question}\n\n{answer}")
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
__all__ = [
|
|
129
|
+
"DISMISS_TIMEOUT_S",
|
|
130
|
+
"emit_fallback",
|
|
131
|
+
"is_tty",
|
|
132
|
+
"show_answer",
|
|
133
|
+
"show_asking",
|
|
134
|
+
"wait_for_dismiss",
|
|
135
|
+
]
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
"""Plugin: `/btw` — ask a quick side question without derailing the task.
|
|
2
|
+
|
|
3
|
+
Runs an independent, single-turn model query (fresh throwaway agent, no
|
|
4
|
+
tools, no shared history) and shows the answer inline, Claude Code
|
|
5
|
+
style. The main conversation's context window never sees the exchange,
|
|
6
|
+
so minor "by the way..." curiosities stop costing you expensive tokens.
|
|
7
|
+
|
|
8
|
+
Mid-run behaviour comes free from ``run_ui._run_paused_commands``:
|
|
9
|
+
slash commands typed while the agent works are queued, the in-flight
|
|
10
|
+
stream finishes, the agent parks at its pause boundary, the command
|
|
11
|
+
runs with the terminal released, then the run resumes. `/btw` just has
|
|
12
|
+
to behave like any other blocking command inside that window — and the
|
|
13
|
+
dismiss-wait keeps the window open until the user has read the answer.
|
|
14
|
+
|
|
15
|
+
Usage:
|
|
16
|
+
/btw <question> One-shot side query, answer shown inline
|
|
17
|
+
/btw --help Show usage
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
from __future__ import annotations
|
|
21
|
+
|
|
22
|
+
import logging
|
|
23
|
+
from typing import List, Optional, Tuple
|
|
24
|
+
|
|
25
|
+
from code_puppy.callbacks import register_callback
|
|
26
|
+
|
|
27
|
+
logger = logging.getLogger(__name__)
|
|
28
|
+
|
|
29
|
+
COMMAND_NAME = "btw"
|
|
30
|
+
|
|
31
|
+
_USAGE = (
|
|
32
|
+
"Usage: /btw <question>\n"
|
|
33
|
+
" Runs an independent single-turn query and shows the answer in a\n"
|
|
34
|
+
" temporary overlay. Your main conversation history is untouched."
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def _custom_help() -> List[Tuple[str, str]]:
|
|
39
|
+
return [
|
|
40
|
+
(
|
|
41
|
+
COMMAND_NAME,
|
|
42
|
+
"Quick side question, answered inline (single turn, history untouched)",
|
|
43
|
+
)
|
|
44
|
+
]
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def _parse_question(command: str) -> Optional[str]:
|
|
48
|
+
"""Return the question text, or None if usage was shown instead."""
|
|
49
|
+
parts = command.split(maxsplit=1)
|
|
50
|
+
question = parts[1].strip() if len(parts) == 2 else ""
|
|
51
|
+
if not question or question in {"--help", "-h", "help"}:
|
|
52
|
+
from code_puppy.messaging import emit_info
|
|
53
|
+
|
|
54
|
+
emit_info(_USAGE)
|
|
55
|
+
return None
|
|
56
|
+
return question
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
def _handle_custom_command(command: str, name: str) -> Optional[bool]:
|
|
60
|
+
if name != COMMAND_NAME:
|
|
61
|
+
return None
|
|
62
|
+
|
|
63
|
+
question = _parse_question(command)
|
|
64
|
+
if question is None:
|
|
65
|
+
return True
|
|
66
|
+
|
|
67
|
+
from code_puppy.messaging import emit_error, emit_info
|
|
68
|
+
|
|
69
|
+
from . import inline_view
|
|
70
|
+
from .side_query import ask_blocking, resolve_model_name
|
|
71
|
+
|
|
72
|
+
model_name = resolve_model_name()
|
|
73
|
+
if not model_name:
|
|
74
|
+
emit_error("/btw: could not resolve a model to ask. Check your model config.")
|
|
75
|
+
return True
|
|
76
|
+
|
|
77
|
+
tty = inline_view.is_tty()
|
|
78
|
+
if tty:
|
|
79
|
+
inline_view.show_asking(question, model_name)
|
|
80
|
+
else:
|
|
81
|
+
emit_info(f"btw: asking {model_name} (side query, history untouched)...")
|
|
82
|
+
|
|
83
|
+
try:
|
|
84
|
+
answer = ask_blocking(model_name, question)
|
|
85
|
+
except Exception as exc:
|
|
86
|
+
emit_error(f"/btw failed ({type(exc).__name__}): {exc}")
|
|
87
|
+
return True
|
|
88
|
+
|
|
89
|
+
if tty:
|
|
90
|
+
inline_view.show_answer(answer)
|
|
91
|
+
inline_view.wait_for_dismiss()
|
|
92
|
+
else:
|
|
93
|
+
inline_view.emit_fallback(question, answer)
|
|
94
|
+
return True
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
register_callback("custom_command", _handle_custom_command)
|
|
98
|
+
register_callback("custom_command_help", _custom_help)
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
__all__ = [
|
|
102
|
+
"COMMAND_NAME",
|
|
103
|
+
"_custom_help",
|
|
104
|
+
"_handle_custom_command",
|
|
105
|
+
"_parse_question",
|
|
106
|
+
]
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
"""One-shot, history-free model query backing the `/btw` command.
|
|
2
|
+
|
|
3
|
+
Deliberately minimal (YAGNI): a throwaway pydantic_ai Agent with no
|
|
4
|
+
tools, no message history, and a tiny system prompt. The main agent's
|
|
5
|
+
context window never sees any of this — that's the whole point.
|
|
6
|
+
|
|
7
|
+
Threading note: ``handle_command`` executes synchronously *inside* the
|
|
8
|
+
already-running main event loop, so we can't ``asyncio.run`` on the
|
|
9
|
+
main thread. Same escape hatch as the ``steer_queue`` menu: hop to a
|
|
10
|
+
worker thread and give it its own loop.
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
from __future__ import annotations
|
|
14
|
+
|
|
15
|
+
import asyncio
|
|
16
|
+
import concurrent.futures
|
|
17
|
+
import logging
|
|
18
|
+
|
|
19
|
+
logger = logging.getLogger(__name__)
|
|
20
|
+
|
|
21
|
+
QUERY_TIMEOUT_S = 180.0
|
|
22
|
+
|
|
23
|
+
_INSTRUCTIONS = (
|
|
24
|
+
"You are answering a quick side question ('/btw') a developer asked "
|
|
25
|
+
"mid-coding-session. Answer directly and concisely — a few sentences "
|
|
26
|
+
"or a short snippet is ideal. No preamble, no follow-up questions."
|
|
27
|
+
)
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def resolve_model_name() -> str | None:
|
|
31
|
+
"""Current agent's pinned model if any, else the global model."""
|
|
32
|
+
try:
|
|
33
|
+
from code_puppy.agents.agent_manager import get_current_agent
|
|
34
|
+
|
|
35
|
+
pinned = get_current_agent().get_model_name()
|
|
36
|
+
if pinned:
|
|
37
|
+
return pinned
|
|
38
|
+
except Exception:
|
|
39
|
+
logger.debug("btw: agent model lookup failed", exc_info=True)
|
|
40
|
+
try:
|
|
41
|
+
from code_puppy.config import get_global_model_name
|
|
42
|
+
|
|
43
|
+
return get_global_model_name()
|
|
44
|
+
except Exception:
|
|
45
|
+
logger.debug("btw: global model lookup failed", exc_info=True)
|
|
46
|
+
return None
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
async def _ask(model_name: str, question: str) -> str:
|
|
50
|
+
"""Single-turn query against a fresh Agent. Raises on failure."""
|
|
51
|
+
from pydantic_ai import Agent, UsageLimits
|
|
52
|
+
|
|
53
|
+
from code_puppy.model_factory import ModelFactory, make_model_settings
|
|
54
|
+
from code_puppy.model_utils import prepare_prompt_for_model
|
|
55
|
+
|
|
56
|
+
models_config = ModelFactory.load_config()
|
|
57
|
+
if model_name not in models_config:
|
|
58
|
+
raise ValueError(f"model {model_name!r} not present in the model config")
|
|
59
|
+
|
|
60
|
+
model = ModelFactory.get_model(model_name, models_config)
|
|
61
|
+
prepared = prepare_prompt_for_model(
|
|
62
|
+
model_name,
|
|
63
|
+
_INSTRUCTIONS,
|
|
64
|
+
question,
|
|
65
|
+
prepend_system_to_user=True,
|
|
66
|
+
)
|
|
67
|
+
agent = Agent(
|
|
68
|
+
model=model,
|
|
69
|
+
instructions=prepared.instructions,
|
|
70
|
+
retries=1,
|
|
71
|
+
model_settings=make_model_settings(model_name),
|
|
72
|
+
)
|
|
73
|
+
result = await agent.run(
|
|
74
|
+
prepared.user_prompt,
|
|
75
|
+
usage_limits=UsageLimits(request_limit=3),
|
|
76
|
+
)
|
|
77
|
+
return str(result.output)
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
def ask_blocking(
|
|
81
|
+
model_name: str,
|
|
82
|
+
question: str,
|
|
83
|
+
timeout_s: float = QUERY_TIMEOUT_S,
|
|
84
|
+
) -> str:
|
|
85
|
+
"""Run the one-shot query on a worker thread; block until answered."""
|
|
86
|
+
with concurrent.futures.ThreadPoolExecutor(max_workers=1) as executor:
|
|
87
|
+
future = executor.submit(lambda: asyncio.run(_ask(model_name, question)))
|
|
88
|
+
return future.result(timeout=timeout_s)
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
__all__ = ["QUERY_TIMEOUT_S", "ask_blocking", "resolve_model_name"]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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.586 → code_puppy-0.0.587}/code_puppy/command_line/load_context_completion.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/command_line/mcp/catalog_server_installer.py
RENAMED
|
File without changes
|
|
File without changes
|
{code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/command_line/mcp/custom_server_installer.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/command_line/mcp/silence_warning_command.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/command_line/model_picker_completion.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{code_puppy-0.0.586 → code_puppy-0.0.587}/code_puppy/command_line/prompt_toolkit_completion.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|