code-puppy 0.0.554__tar.gz → 0.0.556__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.554 → code_puppy-0.0.556}/PKG-INFO +1 -1
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/claude_cache_client.py +6 -5
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/model_utils.py +14 -7
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/agent_skills/discovery.py +9 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/tools/ask_user_question/constants.py +3 -1
- code_puppy-0.0.556/code_puppy/tools/ask_user_question/registration.py +157 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/pyproject.toml +1 -1
- code_puppy-0.0.554/code_puppy/tools/ask_user_question/registration.py +0 -78
- {code_puppy-0.0.554 → code_puppy-0.0.556}/.gitignore +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/LICENSE +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/README.md +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/__init__.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/__main__.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/agents/__init__.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/agents/_builder.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/agents/_compaction.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/agents/_diagnostics.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/agents/_history.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/agents/_key_listeners.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/agents/_non_streaming_render.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/agents/_run_signals.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/agents/_runtime.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/agents/_steer_processor.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/agents/agent_code_puppy.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/agents/agent_creator_agent.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/agents/agent_helios.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/agents/agent_manager.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/agents/agent_planning.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/agents/agent_qa_kitten.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/agents/base_agent.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/agents/event_stream_handler.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/agents/json_agent.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/agents/run_stats.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/agents/smooth_stream.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/agents/subagent_stream_handler.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/callbacks.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/chatgpt_codex_client.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/cli_runner.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/__init__.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/add_model_menu.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/agent_menu.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/attachments.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/autosave_menu.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/clipboard.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/colors_menu.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/command_handler.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/command_registry.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/config_apply.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/config_commands.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/core_commands.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/diff_menu.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/file_index.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/file_path_completion.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/judges_menu.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/load_context_completion.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/mcp/__init__.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/mcp/base.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/mcp/catalog_server_installer.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/mcp/custom_server_form.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/mcp/custom_server_installer.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/mcp/edit_command.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/mcp/handler.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/mcp/help_command.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/mcp/install_command.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/mcp/install_menu.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/mcp/list_command.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/mcp/logs_command.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/mcp/remove_command.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/mcp/restart_command.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/mcp/search_command.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/mcp/silence_warning_command.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/mcp/start_all_command.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/mcp/start_command.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/mcp/status_command.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/mcp/stop_all_command.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/mcp/stop_command.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/mcp/utils.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/mcp/wizard_utils.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/mcp_binding_menu.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/mcp_completion.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/model_picker_completion.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/model_settings_menu.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/onboarding_slides.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/onboarding_wizard.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/pagination.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/pin_command_completion.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/prompt_toolkit_completion.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/session_commands.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/set_menu.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/set_menu_catalog.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/set_menu_render.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/set_menu_schema.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/set_menu_settings.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/set_menu_shims.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/set_menu_values.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/shell_passthrough.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/skills_completion.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/uc_menu.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/utils.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/wiggum_state.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/config.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/error_logging.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/gemini_code_assist.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/gemini_model.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/hook_engine/README.md +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/hook_engine/__init__.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/hook_engine/aliases.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/hook_engine/engine.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/hook_engine/executor.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/hook_engine/matcher.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/hook_engine/models.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/hook_engine/registry.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/hook_engine/validator.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/http_utils.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/keymap.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/list_filtering.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/main.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/mcp_/__init__.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/mcp_/agent_bindings.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/mcp_/async_lifecycle.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/mcp_/blocking_startup.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/mcp_/captured_stdio_server.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/mcp_/circuit_breaker.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/mcp_/config_wizard.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/mcp_/dashboard.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/mcp_/error_isolation.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/mcp_/examples/retry_example.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/mcp_/health_monitor.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/mcp_/managed_server.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/mcp_/manager.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/mcp_/mcp_logs.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/mcp_/registry.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/mcp_/retry_manager.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/mcp_/server_registry_catalog.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/mcp_/status_tracker.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/mcp_/system_tools.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/mcp_prompts/__init__.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/mcp_prompts/hook_creator.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/messaging/__init__.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/messaging/bus.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/messaging/commands.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/messaging/markdown_patches.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/messaging/message_queue.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/messaging/messages.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/messaging/pause_controller.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/messaging/queue_console.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/messaging/renderers.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/messaging/rich_renderer.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/messaging/spinner/__init__.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/messaging/spinner/console_spinner.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/messaging/spinner/spinner_base.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/messaging/subagent_console.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/model_descriptions.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/model_factory.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/model_switching.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/models.json +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/models_dev_api.json +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/models_dev_parser.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/__init__.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/agent_skills/__init__.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/agent_skills/config.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/agent_skills/downloader.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/agent_skills/enabled_skills.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/agent_skills/installer.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/agent_skills/metadata.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/agent_skills/prompt_builder.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/agent_skills/register_callbacks.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/agent_skills/remote_catalog.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/agent_skills/skill_catalog.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/agent_skills/skill_commands.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/agent_skills/skills_install_menu.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/agent_skills/skills_menu.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/agent_steering/README.md +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/agent_steering/__init__.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/agent_steering/register_callbacks.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/agent_steering/steering_prompt.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/aws_bedrock/__init__.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/aws_bedrock/config.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/aws_bedrock/register_callbacks.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/aws_bedrock/utils.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/azure_foundry/README.md +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/azure_foundry/__init__.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/azure_foundry/config.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/azure_foundry/discovery.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/azure_foundry/register_callbacks.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/azure_foundry/token.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/azure_foundry/utils.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/chatgpt_oauth/__init__.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/chatgpt_oauth/config.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/chatgpt_oauth/oauth_flow.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/chatgpt_oauth/register_callbacks.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/chatgpt_oauth/test_plugin.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/chatgpt_oauth/utils.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/claude_code_hooks/__init__.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/claude_code_hooks/config.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/claude_code_hooks/register_callbacks.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/claude_code_oauth/README.md +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/claude_code_oauth/SETUP.md +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/claude_code_oauth/__init__.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/claude_code_oauth/config.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/claude_code_oauth/fast_mode.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/claude_code_oauth/prompt_handler.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/claude_code_oauth/register_callbacks.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/claude_code_oauth/test_fast_mode.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/claude_code_oauth/test_plugin.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/claude_code_oauth/token_refresh_heartbeat.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/claude_code_oauth/utils.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/config.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/context_indicator/__init__.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/context_indicator/register_callbacks.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/context_indicator/usage.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/copilot_auth/__init__.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/copilot_auth/config.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/copilot_auth/reasoning_client.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/copilot_auth/register_callbacks.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/copilot_auth/utils.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/customizable_commands/__init__.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/customizable_commands/register_callbacks.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/dbos_durable_exec/__init__.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/dbos_durable_exec/cancel.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/dbos_durable_exec/commands.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/dbos_durable_exec/config.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/dbos_durable_exec/lifecycle.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/dbos_durable_exec/register_callbacks.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/dbos_durable_exec/runtime.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/dbos_durable_exec/workflow_ids.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/dbos_durable_exec/wrapper.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/destructive_command_guard/__init__.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/destructive_command_guard/detector.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/destructive_command_guard/register_callbacks.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/emoji_filter/__init__.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/emoji_filter/config.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/emoji_filter/register_callbacks.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/emoji_filter/stripper.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/example_custom_command/README.md +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/example_custom_command/register_callbacks.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/file_permission_handler/__init__.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/file_permission_handler/register_callbacks.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/force_push_guard/__init__.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/force_push_guard/detector.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/force_push_guard/register_callbacks.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/force_push_guard/test_detector.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/frontend_emitter/__init__.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/frontend_emitter/emitter.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/frontend_emitter/register_callbacks.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/frontend_emitter/session_context.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/hook_creator/__init__.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/hook_creator/register_callbacks.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/hook_manager/__init__.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/hook_manager/config.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/hook_manager/hooks_menu.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/hook_manager/register_callbacks.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/oauth_puppy_html.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/obsidian_agent/README.md +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/obsidian_agent/__init__.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/obsidian_agent/agent_obsidian.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/obsidian_agent/register_callbacks.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/ollama/__init__.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/ollama/register_callbacks.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/ollama_setup/__init__.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/ollama_setup/completer.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/ollama_setup/register_callbacks.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/plugin_list/__init__.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/plugin_list/plugins_menu.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/plugin_list/register_callbacks.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/pop_command/__init__.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/pop_command/register_callbacks.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/prompt_newline/__init__.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/prompt_newline/config.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/prompt_newline/register_callbacks.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/prune/__init__.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/prune/prune_menu.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/prune/prune_model.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/prune/prune_render.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/prune/register_callbacks.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/puppy_kennel/README.md +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/puppy_kennel/__init__.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/puppy_kennel/commands.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/puppy_kennel/config.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/puppy_kennel/kennel.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/puppy_kennel/packer.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/puppy_kennel/recorder.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/puppy_kennel/register_callbacks.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/puppy_kennel/retriever.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/puppy_kennel/schema.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/puppy_kennel/state.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/puppy_kennel/tools.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/puppy_kennel/wings.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/review_pr/__init__.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/review_pr/register_callbacks.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/shell_safety/__init__.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/shell_safety/agent_shell_safety.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/shell_safety/command_cache.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/shell_safety/register_callbacks.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/statusline/__init__.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/statusline/config.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/statusline/payload.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/statusline/prompt_patch.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/statusline/register_callbacks.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/statusline/runner.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/statusline/statusline_command.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/switch_agent_resume/__init__.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/switch_agent_resume/register_callbacks.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/synthetic_status/__init__.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/synthetic_status/register_callbacks.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/synthetic_status/status_api.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/theme/README.md +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/theme/__init__.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/theme/bundled_palettes.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/theme/content_styles.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/theme/osc_palette.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/theme/picker.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/theme/register_callbacks.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/theme/rich_themes.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/theme/themes.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/token_ratio_learner/__init__.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/token_ratio_learner/ratios.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/token_ratio_learner/register_callbacks.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/universal_constructor/__init__.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/universal_constructor/models.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/universal_constructor/register_callbacks.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/universal_constructor/registry.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/universal_constructor/sandbox.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/wide_completion_menu/__init__.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/wide_completion_menu/register_callbacks.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/wiggum/__init__.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/wiggum/judge.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/wiggum/judge_config.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/wiggum/register_callbacks.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/plugins/wiggum/state.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/provider_credentials.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/provider_identity.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/pydantic_patches.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/reopenable_async_client.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/round_robin_model.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/session_storage.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/status_display.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/summarization_agent.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/terminal_utils.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/tools/__init__.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/tools/agent_tools.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/tools/ask_user_question/__init__.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/tools/ask_user_question/demo_tui.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/tools/ask_user_question/handler.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/tools/ask_user_question/models.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/tools/ask_user_question/renderers.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/tools/ask_user_question/terminal_ui.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/tools/ask_user_question/theme.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/tools/ask_user_question/tui_loop.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/tools/browser/__init__.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/tools/browser/browser_control.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/tools/browser/browser_interactions.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/tools/browser/browser_locators.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/tools/browser/browser_manager.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/tools/browser/browser_navigation.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/tools/browser/browser_screenshot.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/tools/browser/browser_scripts.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/tools/browser/browser_workflows.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/tools/command_runner.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/tools/common.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/tools/display.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/tools/file_modifications.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/tools/file_operations.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/tools/image_tools.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/tools/model_tools.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/tools/skills_tools.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/tools/subagent_context.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/tools/subagent_invocation.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/tools/tools_content.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/tools/universal_constructor.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/uvx_detection.py +0 -0
- {code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/version_checker.py +0 -0
|
@@ -42,13 +42,14 @@ CLAUDE_CLI_USER_AGENT = "claude-cli/2.1.2 (external, cli)"
|
|
|
42
42
|
|
|
43
43
|
|
|
44
44
|
def _model_requires_thinking_summary(model_name):
|
|
45
|
-
# Anthropic's Opus 4.7
|
|
46
|
-
# 'display:
|
|
47
|
-
#
|
|
45
|
+
# Anthropic's Opus 4.7+ / Fable 5 families reject adaptive-thinking
|
|
46
|
+
# requests unless 'display: summarized' is present alongside
|
|
47
|
+
# 'type: adaptive'. Delegate to model_utils — single source of truth.
|
|
48
48
|
if not model_name:
|
|
49
49
|
return False
|
|
50
|
-
|
|
51
|
-
|
|
50
|
+
from code_puppy.model_utils import should_use_anthropic_thinking_summary
|
|
51
|
+
|
|
52
|
+
return should_use_anthropic_thinking_summary(model_name)
|
|
52
53
|
|
|
53
54
|
|
|
54
55
|
def _enforce_thinking_display_summary(payload):
|
|
@@ -136,6 +136,8 @@ def supports_adaptive_thinking(
|
|
|
136
136
|
"4-8-opus",
|
|
137
137
|
"sonnet-4-6",
|
|
138
138
|
"4-6-sonnet",
|
|
139
|
+
"fable-5",
|
|
140
|
+
"5-fable",
|
|
139
141
|
)
|
|
140
142
|
return any(tag in c for c in candidates for tag in _ADAPTIVE_TAGS)
|
|
141
143
|
|
|
@@ -145,7 +147,7 @@ def get_default_extended_thinking(
|
|
|
145
147
|
) -> str:
|
|
146
148
|
"""Return the default extended_thinking mode for an Anthropic model.
|
|
147
149
|
|
|
148
|
-
Opus 4-6, Opus 4-7, Opus 4-8,
|
|
150
|
+
Opus 4-6, Opus 4-7, Opus 4-8, Sonnet 4-6, and Fable 5 models default to
|
|
149
151
|
``"adaptive"`` thinking; all other Anthropic models default to ``"enabled"``.
|
|
150
152
|
|
|
151
153
|
Args:
|
|
@@ -166,13 +168,18 @@ def should_use_anthropic_thinking_summary(
|
|
|
166
168
|
) -> bool:
|
|
167
169
|
"""Return whether Anthropic adaptive thinking should request summary display.
|
|
168
170
|
|
|
169
|
-
Anthropic's newer Opus 4.7
|
|
170
|
-
alongside ``thinking={"type": "adaptive"}``.
|
|
171
|
+
Anthropic's newer Opus 4.7+, Opus 4.8, and Fable 5 models require
|
|
172
|
+
``display: \"summarized\"`` alongside ``thinking={"type": "adaptive"}``.
|
|
171
173
|
"""
|
|
174
|
+
_SUMMARY_TAGS = (
|
|
175
|
+
"opus-4-7",
|
|
176
|
+
"4-7-opus",
|
|
177
|
+
"opus-4-8",
|
|
178
|
+
"4-8-opus",
|
|
179
|
+
"fable-5",
|
|
180
|
+
"5-fable",
|
|
181
|
+
)
|
|
172
182
|
candidates = [model_name.lower()]
|
|
173
183
|
if actual_model_id:
|
|
174
184
|
candidates.append(actual_model_id.lower())
|
|
175
|
-
return any(
|
|
176
|
-
"opus-4-7" in c or "4-7-opus" in c or "opus-4-8" in c or "4-8-opus" in c
|
|
177
|
-
for c in candidates
|
|
178
|
-
)
|
|
185
|
+
return any(tag in c for c in candidates for tag in _SUMMARY_TAGS)
|
|
@@ -235,6 +235,15 @@ def discover_skills(directories: Optional[List[Path]] = None) -> List[SkillInfo]
|
|
|
235
235
|
if not skill_dir.is_dir() or skill_dir.name.startswith("."):
|
|
236
236
|
continue
|
|
237
237
|
|
|
238
|
+
# First-discovered skill wins - skip duplicates from later directories
|
|
239
|
+
if skill_dir.name in seen_skill_names:
|
|
240
|
+
logger.debug(
|
|
241
|
+
"Skipping duplicate skill '%s' at %s (already discovered)",
|
|
242
|
+
skill_dir.name,
|
|
243
|
+
skill_dir,
|
|
244
|
+
)
|
|
245
|
+
continue
|
|
246
|
+
|
|
238
247
|
has_skill_md = is_valid_skill_directory(skill_dir)
|
|
239
248
|
skill_info = SkillInfo(
|
|
240
249
|
name=skill_dir.name,
|
|
@@ -6,7 +6,9 @@ from typing import Final
|
|
|
6
6
|
MAX_QUESTIONS_PER_CALL: Final[int] = 10 # Reasonable limit for a single TUI interaction
|
|
7
7
|
MIN_OPTIONS_PER_QUESTION: Final[int] = 2
|
|
8
8
|
MAX_OPTIONS_PER_QUESTION: Final[int] = 6
|
|
9
|
-
MAX_HEADER_LENGTH: Final[int] =
|
|
9
|
+
MAX_HEADER_LENGTH: Final[int] = (
|
|
10
|
+
25 # Must fit in left panel (MAX_LEFT_PANEL_WIDTH - padding)
|
|
11
|
+
)
|
|
10
12
|
MAX_LABEL_LENGTH: Final[int] = 50
|
|
11
13
|
MAX_DESCRIPTION_LENGTH: Final[int] = 200
|
|
12
14
|
MAX_QUESTION_LENGTH: Final[int] = 500
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
"""Tool registration for ask_user_question."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import json
|
|
6
|
+
from typing import TYPE_CHECKING, Annotated, Any, Dict, List
|
|
7
|
+
|
|
8
|
+
from pydantic import BeforeValidator, Field, WithJsonSchema
|
|
9
|
+
from pydantic_ai import RunContext
|
|
10
|
+
|
|
11
|
+
from .constants import (
|
|
12
|
+
MAX_DESCRIPTION_LENGTH,
|
|
13
|
+
MAX_HEADER_LENGTH,
|
|
14
|
+
MAX_LABEL_LENGTH,
|
|
15
|
+
MAX_OPTIONS_PER_QUESTION,
|
|
16
|
+
MAX_QUESTION_LENGTH,
|
|
17
|
+
MAX_QUESTIONS_PER_CALL,
|
|
18
|
+
MIN_OPTIONS_PER_QUESTION,
|
|
19
|
+
)
|
|
20
|
+
from .handler import ask_user_question as _ask_user_question_impl
|
|
21
|
+
from .models import AskUserQuestionOutput
|
|
22
|
+
|
|
23
|
+
if TYPE_CHECKING:
|
|
24
|
+
from pydantic_ai import Agent
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
# Inline JSON schemas to avoid $defs/$ref that many LLM providers misinterpret.
|
|
28
|
+
# This matches the approach used by replace_in_file for complex nested types.
|
|
29
|
+
# Include maxLength constraints so LLMs know the limits upfront.
|
|
30
|
+
_OPTION_SCHEMA: Dict[str, Any] = {
|
|
31
|
+
"type": "object",
|
|
32
|
+
"properties": {
|
|
33
|
+
"label": {
|
|
34
|
+
"type": "string",
|
|
35
|
+
"maxLength": MAX_LABEL_LENGTH,
|
|
36
|
+
"description": f"Short option name (1-5 words, max {MAX_LABEL_LENGTH} chars)",
|
|
37
|
+
},
|
|
38
|
+
"description": {
|
|
39
|
+
"type": "string",
|
|
40
|
+
"maxLength": MAX_DESCRIPTION_LENGTH,
|
|
41
|
+
"description": f"Optional explanation (max {MAX_DESCRIPTION_LENGTH} chars)",
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
"required": ["label"],
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
_QUESTION_SCHEMA: Dict[str, Any] = {
|
|
48
|
+
"type": "object",
|
|
49
|
+
"properties": {
|
|
50
|
+
"question": {
|
|
51
|
+
"type": "string",
|
|
52
|
+
"maxLength": MAX_QUESTION_LENGTH,
|
|
53
|
+
"description": f"The full question text (max {MAX_QUESTION_LENGTH} chars)",
|
|
54
|
+
},
|
|
55
|
+
"header": {
|
|
56
|
+
"type": "string",
|
|
57
|
+
"maxLength": MAX_HEADER_LENGTH,
|
|
58
|
+
"description": f"Short label for compact display (max {MAX_HEADER_LENGTH} chars, no spaces)",
|
|
59
|
+
},
|
|
60
|
+
"multi_select": {
|
|
61
|
+
"type": "boolean",
|
|
62
|
+
"description": "If true, user can select multiple options (default: false)",
|
|
63
|
+
},
|
|
64
|
+
"options": {
|
|
65
|
+
"type": "array",
|
|
66
|
+
"items": _OPTION_SCHEMA,
|
|
67
|
+
"minItems": MIN_OPTIONS_PER_QUESTION,
|
|
68
|
+
"maxItems": MAX_OPTIONS_PER_QUESTION,
|
|
69
|
+
"description": f"Array of {MIN_OPTIONS_PER_QUESTION}-{MAX_OPTIONS_PER_QUESTION} selectable options",
|
|
70
|
+
},
|
|
71
|
+
},
|
|
72
|
+
"required": ["question", "header", "options"],
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
_QUESTIONS_ARRAY_SCHEMA: Dict[str, Any] = {
|
|
76
|
+
"type": "array",
|
|
77
|
+
"items": _QUESTION_SCHEMA,
|
|
78
|
+
"minItems": 1,
|
|
79
|
+
"maxItems": MAX_QUESTIONS_PER_CALL,
|
|
80
|
+
"description": (
|
|
81
|
+
f"Array of 1-{MAX_QUESTIONS_PER_CALL} question objects. Each question needs: "
|
|
82
|
+
f"'question' (max {MAX_QUESTION_LENGTH} chars), "
|
|
83
|
+
f"'header' (max {MAX_HEADER_LENGTH} chars, no spaces), "
|
|
84
|
+
f"'options' (array of {MIN_OPTIONS_PER_QUESTION}-{MAX_OPTIONS_PER_QUESTION} options with 'label'). "
|
|
85
|
+
"Optional: 'multi_select' (boolean)."
|
|
86
|
+
),
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
def _coerce_questions_json_string(v: Any) -> Any:
|
|
91
|
+
"""Coerce a JSON-stringified array to a native list before pydantic validates it.
|
|
92
|
+
|
|
93
|
+
LLMs frequently pass the questions array as a JSON string (e.g. ``"[{...}]"``)
|
|
94
|
+
instead of a native list. pydantic-ai validates tool call arguments against
|
|
95
|
+
the function signature before calling the handler — so the coercion must
|
|
96
|
+
happen here, at the registration layer, before pydantic sees the value.
|
|
97
|
+
|
|
98
|
+
If JSON parsing fails, the original value is returned unchanged and pydantic
|
|
99
|
+
produces a clear type error.
|
|
100
|
+
"""
|
|
101
|
+
if isinstance(v, str):
|
|
102
|
+
try:
|
|
103
|
+
return json.loads(v)
|
|
104
|
+
except (json.JSONDecodeError, ValueError):
|
|
105
|
+
return v
|
|
106
|
+
return v
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
# Type alias with explicit JSON schema override so LLMs see the full structure.
|
|
110
|
+
# The BeforeValidator handles JSON-string coercion before validation.
|
|
111
|
+
# The WithJsonSchema tells pydantic to emit our inline schema instead of inferring.
|
|
112
|
+
QuestionsListWithSchema = Annotated[
|
|
113
|
+
List[Dict[str, Any]],
|
|
114
|
+
BeforeValidator(_coerce_questions_json_string),
|
|
115
|
+
WithJsonSchema(_QUESTIONS_ARRAY_SCHEMA),
|
|
116
|
+
Field(
|
|
117
|
+
description=(
|
|
118
|
+
f"Array of 1-{MAX_QUESTIONS_PER_CALL} question objects. Each question needs: "
|
|
119
|
+
f"'question' (max {MAX_QUESTION_LENGTH} chars), "
|
|
120
|
+
f"'header' (max {MAX_HEADER_LENGTH} chars), "
|
|
121
|
+
f"'options' ({MIN_OPTIONS_PER_QUESTION}-{MAX_OPTIONS_PER_QUESTION} options with 'label')."
|
|
122
|
+
)
|
|
123
|
+
),
|
|
124
|
+
]
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
def register_ask_user_question(agent: Agent) -> None:
|
|
128
|
+
"""Register the ask_user_question tool with the given agent."""
|
|
129
|
+
|
|
130
|
+
@agent.tool
|
|
131
|
+
def ask_user_question(
|
|
132
|
+
context: RunContext, # noqa: ARG001 - Required by framework
|
|
133
|
+
questions: QuestionsListWithSchema,
|
|
134
|
+
) -> AskUserQuestionOutput:
|
|
135
|
+
"""Ask the user multiple related questions in an interactive TUI."""
|
|
136
|
+
# Keep the external tool schema simple for provider compatibility.
|
|
137
|
+
# The handler performs the real nested validation and normalization.
|
|
138
|
+
# Fire a Claude Code-style notification so plugins can react when the
|
|
139
|
+
# agent is awaiting user input.
|
|
140
|
+
try:
|
|
141
|
+
import asyncio as _asyncio
|
|
142
|
+
|
|
143
|
+
from code_puppy.callbacks import on_notification
|
|
144
|
+
|
|
145
|
+
_coro = on_notification(
|
|
146
|
+
"Agent is waiting for user input",
|
|
147
|
+
level="prompt",
|
|
148
|
+
context={"questions": questions},
|
|
149
|
+
)
|
|
150
|
+
try:
|
|
151
|
+
_asyncio.get_running_loop()
|
|
152
|
+
_asyncio.ensure_future(_coro)
|
|
153
|
+
except RuntimeError:
|
|
154
|
+
_asyncio.run(_coro)
|
|
155
|
+
except Exception:
|
|
156
|
+
pass
|
|
157
|
+
return _ask_user_question_impl(questions)
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
"""Tool registration for ask_user_question."""
|
|
2
|
-
|
|
3
|
-
from __future__ import annotations
|
|
4
|
-
|
|
5
|
-
import json
|
|
6
|
-
from typing import TYPE_CHECKING, Annotated, Any
|
|
7
|
-
|
|
8
|
-
from pydantic import BeforeValidator, Field
|
|
9
|
-
from pydantic_ai import RunContext
|
|
10
|
-
|
|
11
|
-
from .handler import ask_user_question as _ask_user_question_impl
|
|
12
|
-
from .models import AskUserQuestionOutput
|
|
13
|
-
|
|
14
|
-
if TYPE_CHECKING:
|
|
15
|
-
from pydantic_ai import Agent
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
def _coerce_questions_json_string(v: Any) -> Any:
|
|
19
|
-
"""Coerce a JSON-stringified array to a native list before pydantic validates it.
|
|
20
|
-
|
|
21
|
-
LLMs frequently pass the questions array as a JSON string (e.g. ``"[{...}]"``)
|
|
22
|
-
instead of a native list. pydantic-ai validates tool call arguments against
|
|
23
|
-
the function signature before calling the handler — so the coercion must
|
|
24
|
-
happen here, at the registration layer, before pydantic sees the value.
|
|
25
|
-
|
|
26
|
-
If JSON parsing fails, the original value is returned unchanged and pydantic
|
|
27
|
-
produces a clear type error.
|
|
28
|
-
"""
|
|
29
|
-
if isinstance(v, str):
|
|
30
|
-
try:
|
|
31
|
-
return json.loads(v)
|
|
32
|
-
except (json.JSONDecodeError, ValueError):
|
|
33
|
-
return v
|
|
34
|
-
return v
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
def register_ask_user_question(agent: Agent) -> None:
|
|
38
|
-
"""Register the ask_user_question tool with the given agent."""
|
|
39
|
-
|
|
40
|
-
@agent.tool
|
|
41
|
-
def ask_user_question(
|
|
42
|
-
context: RunContext, # noqa: ARG001 - Required by framework
|
|
43
|
-
questions: Annotated[
|
|
44
|
-
list[dict[str, Any]],
|
|
45
|
-
BeforeValidator(_coerce_questions_json_string),
|
|
46
|
-
Field(
|
|
47
|
-
description=(
|
|
48
|
-
"Array of question objects. Each question should include: "
|
|
49
|
-
"'question' (string), 'header' (short string), optional "
|
|
50
|
-
"'multi_select' (boolean), and 'options' (array of option "
|
|
51
|
-
"objects with 'label' and optional 'description')."
|
|
52
|
-
)
|
|
53
|
-
),
|
|
54
|
-
],
|
|
55
|
-
) -> AskUserQuestionOutput:
|
|
56
|
-
"""Ask the user multiple related questions in an interactive TUI."""
|
|
57
|
-
# Keep the external tool schema simple for provider compatibility.
|
|
58
|
-
# The handler performs the real nested validation and normalization.
|
|
59
|
-
# Fire a Claude Code-style notification so plugins can react when the
|
|
60
|
-
# agent is awaiting user input.
|
|
61
|
-
try:
|
|
62
|
-
import asyncio as _asyncio
|
|
63
|
-
|
|
64
|
-
from code_puppy.callbacks import on_notification
|
|
65
|
-
|
|
66
|
-
_coro = on_notification(
|
|
67
|
-
"Agent is waiting for user input",
|
|
68
|
-
level="prompt",
|
|
69
|
-
context={"questions": questions},
|
|
70
|
-
)
|
|
71
|
-
try:
|
|
72
|
-
_asyncio.get_running_loop()
|
|
73
|
-
_asyncio.ensure_future(_coro)
|
|
74
|
-
except RuntimeError:
|
|
75
|
-
_asyncio.run(_coro)
|
|
76
|
-
except Exception:
|
|
77
|
-
pass
|
|
78
|
-
return _ask_user_question_impl(questions)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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.554 → code_puppy-0.0.556}/code_puppy/command_line/load_context_completion.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{code_puppy-0.0.554 → code_puppy-0.0.556}/code_puppy/command_line/mcp/catalog_server_installer.py
RENAMED
|
File without changes
|
|
File without changes
|
{code_puppy-0.0.554 → code_puppy-0.0.556}/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.554 → code_puppy-0.0.556}/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.554 → code_puppy-0.0.556}/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.554 → code_puppy-0.0.556}/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
|