code-puppy 0.0.652__tar.gz → 0.0.653__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.652 → code_puppy-0.0.653}/PKG-INFO +1 -1
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/command_line/model_settings_menu.py +18 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/config.py +10 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/i18n/locales/en-US.json +13 -1
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/model_factory.py +20 -0
- code_puppy-0.0.653/code_puppy/plugins/chatgpt_oauth/IMAGEGEN_SKILL.md +44 -0
- code_puppy-0.0.653/code_puppy/plugins/chatgpt_oauth/image_generation.py +161 -0
- code_puppy-0.0.653/code_puppy/plugins/chatgpt_oauth/image_tool.py +50 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/chatgpt_oauth/register_callbacks.py +82 -1
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/chatgpt_oauth/test_plugin.py +184 -1
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/chatgpt_oauth/utils.py +2 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/pyproject.toml +1 -1
- {code_puppy-0.0.652 → code_puppy-0.0.653}/.gitignore +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/LICENSE +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/README.md +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/__init__.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/__main__.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/agents/__init__.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/agents/_builder.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/agents/_compaction.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/agents/_diagnostics.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/agents/_history.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/agents/_key_listeners.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/agents/_non_streaming_render.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/agents/_run_signals.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/agents/_runtime.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/agents/_steer_processor.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/agents/agent_code_puppy.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/agents/agent_creator_agent.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/agents/agent_helios.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/agents/agent_manager.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/agents/agent_planning.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/agents/agent_qa_kitten.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/agents/base_agent.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/agents/event_stream_handler.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/agents/json_agent.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/agents/retry_profiles.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/agents/run_stats.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/agents/smooth_stream.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/agents/subagent_stream_handler.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/callbacks.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/chatgpt_codex_client.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/claude_cache_client.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/cli_runner.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/command_line/__init__.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/command_line/add_model_menu.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/command_line/agent_menu.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/command_line/attachments.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/command_line/autosave_menu.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/command_line/autosave_search.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/command_line/clipboard.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/command_line/colors_menu.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/command_line/command_handler.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/command_line/command_registry.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/command_line/config_apply.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/command_line/config_commands.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/command_line/core_commands.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/command_line/diff_menu.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/command_line/file_index.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/command_line/file_path_completion.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/command_line/image_utils.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/command_line/judges_menu.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/command_line/load_context_completion.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/command_line/mcp/__init__.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/command_line/mcp/base.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/command_line/mcp/catalog_server_installer.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/command_line/mcp/custom_server_form.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/command_line/mcp/custom_server_installer.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/command_line/mcp/edit_command.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/command_line/mcp/handler.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/command_line/mcp/help_command.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/command_line/mcp/install_command.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/command_line/mcp/install_menu.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/command_line/mcp/list_command.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/command_line/mcp/logs_command.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/command_line/mcp/remove_command.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/command_line/mcp/restart_command.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/command_line/mcp/search_command.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/command_line/mcp/silence_warning_command.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/command_line/mcp/start_all_command.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/command_line/mcp/start_command.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/command_line/mcp/status_command.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/command_line/mcp/stop_all_command.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/command_line/mcp/stop_command.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/command_line/mcp/trust_command.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/command_line/mcp/utils.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/command_line/mcp/wizard_utils.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/command_line/mcp_binding_menu.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/command_line/mcp_completion.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/command_line/model_picker_completion.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/command_line/onboarding_slides.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/command_line/onboarding_wizard.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/command_line/pagination.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/command_line/pin_command_completion.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/command_line/prompt_toolkit_completion.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/command_line/session_commands.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/command_line/set_menu.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/command_line/set_menu_catalog.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/command_line/set_menu_render.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/command_line/set_menu_schema.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/command_line/set_menu_settings.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/command_line/set_menu_shims.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/command_line/set_menu_values.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/command_line/shell_passthrough.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/command_line/skills_completion.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/command_line/uc_menu.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/command_line/utils.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/command_line/wiggum_state.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/error_logging.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/gemini_code_assist.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/gemini_model.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/hook_engine/README.md +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/hook_engine/__init__.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/hook_engine/aliases.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/hook_engine/engine.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/hook_engine/executor.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/hook_engine/matcher.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/hook_engine/models.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/hook_engine/registry.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/hook_engine/validator.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/http_utils.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/i18n/__init__.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/i18n/audit.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/i18n/catalog.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/i18n/formats.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/i18n/locale.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/i18n/locales/es-AR.json +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/i18n/locales/es-CL.json +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/i18n/locales/es-CO.json +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/i18n/locales/es-MX.json +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/i18n/locales/es.json +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/i18n/locales/fr-CA.json +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/i18n/plurals.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/i18n/pseudo.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/i18n/translate.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/keymap.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/list_filtering.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/main.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/mcp_/__init__.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/mcp_/agent_bindings.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/mcp_/async_lifecycle.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/mcp_/blocking_startup.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/mcp_/captured_stdio_server.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/mcp_/circuit_breaker.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/mcp_/config_wizard.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/mcp_/dashboard.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/mcp_/error_isolation.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/mcp_/examples/retry_example.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/mcp_/health_monitor.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/mcp_/managed_server.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/mcp_/manager.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/mcp_/mcp_logs.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/mcp_/project_config.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/mcp_/registry.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/mcp_/retry_manager.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/mcp_/server_registry_catalog.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/mcp_/status_tracker.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/mcp_/system_tools.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/mcp_/tool_arg_coercion.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/mcp_prompts/__init__.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/mcp_prompts/hook_creator.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/messaging/__init__.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/messaging/bar_painters.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/messaging/bar_rendering.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/messaging/bottom_bar.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/messaging/bus.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/messaging/chords.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/messaging/commands.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/messaging/editor_actions.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/messaging/editor_completion.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/messaging/editor_display.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/messaging/editor_history.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/messaging/editor_keys.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/messaging/editor_paste.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/messaging/external_editor.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/messaging/inline_bar.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/messaging/line_editor.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/messaging/markdown_patches.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/messaging/message_queue.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/messaging/messages.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/messaging/pause_controller.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/messaging/prompt_prefix_style.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/messaging/queue_console.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/messaging/renderers.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/messaging/rich_renderer.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/messaging/run_ui.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/messaging/run_ui_wiring.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/messaging/spinner/__init__.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/messaging/subagent_console.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/messaging/transcript_guard.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/model_descriptions.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/model_switching.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/model_utils.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/models.json +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/models_dev_api.json +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/models_dev_parser.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/__init__.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/acp/README.md +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/acp/__init__.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/acp/agent.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/acp/bridge.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/acp/capabilities.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/acp/commands.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/acp/content.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/acp/io_delegation.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/acp/mcp_config.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/acp/permissions.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/acp/persistence.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/acp/register_callbacks.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/acp/replay.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/acp/session.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/acp/session_config.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/acp/state.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/agent_skills/__init__.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/agent_skills/config.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/agent_skills/discovery.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/agent_skills/downloader.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/agent_skills/enabled_skills.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/agent_skills/installer.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/agent_skills/metadata.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/agent_skills/prompt_builder.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/agent_skills/register_callbacks.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/agent_skills/remote_catalog.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/agent_skills/skill_catalog.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/agent_skills/skill_commands.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/agent_skills/skills_install_menu.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/agent_skills/skills_menu.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/aws_bedrock/__init__.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/aws_bedrock/config.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/aws_bedrock/register_callbacks.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/aws_bedrock/utils.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/azure_foundry/README.md +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/azure_foundry/__init__.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/azure_foundry/config.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/azure_foundry/discovery.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/azure_foundry/register_callbacks.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/azure_foundry/token.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/azure_foundry/utils.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/btw/__init__.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/btw/inline_view.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/btw/register_callbacks.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/btw/side_query.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/chatgpt_oauth/__init__.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/chatgpt_oauth/config.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/chatgpt_oauth/oauth_flow.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/chatgpt_oauth/usage.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/claude_code_hooks/__init__.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/claude_code_hooks/config.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/claude_code_hooks/register_callbacks.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/claude_code_oauth/README.md +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/claude_code_oauth/SETUP.md +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/claude_code_oauth/__init__.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/claude_code_oauth/config.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/claude_code_oauth/fast_mode.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/claude_code_oauth/prompt_handler.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/claude_code_oauth/register_callbacks.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/claude_code_oauth/test_fast_mode.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/claude_code_oauth/test_plugin.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/claude_code_oauth/token_refresh_heartbeat.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/claude_code_oauth/utils.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/code_puppy_agent/SKILL.md +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/code_puppy_agent/__init__.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/code_puppy_agent/register_callbacks.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/config.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/context_indicator/__init__.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/context_indicator/register_callbacks.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/context_indicator/usage.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/copilot_auth/__init__.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/copilot_auth/config.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/copilot_auth/reasoning_client.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/copilot_auth/register_callbacks.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/copilot_auth/utils.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/customizable_commands/__init__.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/customizable_commands/register_callbacks.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/dbos_durable_exec/__init__.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/dbos_durable_exec/cancel.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/dbos_durable_exec/commands.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/dbos_durable_exec/config.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/dbos_durable_exec/lifecycle.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/dbos_durable_exec/register_callbacks.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/dbos_durable_exec/runtime.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/dbos_durable_exec/startup_lock.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/dbos_durable_exec/workflow_ids.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/dbos_durable_exec/wrapper.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/destructive_command_guard/__init__.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/destructive_command_guard/detector.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/destructive_command_guard/register_callbacks.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/emoji_filter/__init__.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/emoji_filter/config.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/emoji_filter/register_callbacks.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/emoji_filter/stripper.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/empty_html_comment_filter/register_callbacks.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/example_custom_command/README.md +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/example_custom_command/register_callbacks.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/file_permission_handler/__init__.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/file_permission_handler/register_callbacks.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/flux_bootstrap/__init__.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/flux_bootstrap/bundled/commands/flux/_docs/README.md +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/flux_bootstrap/bundled/commands/flux/_docs/cheatsheet.md +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/flux_bootstrap/bundled/commands/flux/_docs/pipeline.md +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/flux_bootstrap/bundled/commands/flux/_docs/synopsis.md +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/flux_bootstrap/bundled/commands/flux/about.md +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/flux_bootstrap/bundled/commands/flux/address-feedback.md +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/flux_bootstrap/bundled/commands/flux/ask.md +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/flux_bootstrap/bundled/commands/flux/aug.md +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/flux_bootstrap/bundled/commands/flux/auto-pilot.md +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/flux_bootstrap/bundled/commands/flux/cheatsheet.md +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/flux_bootstrap/bundled/commands/flux/commit.md +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/flux_bootstrap/bundled/commands/flux/config.md +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/flux_bootstrap/bundled/commands/flux/create-pr.md +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/flux_bootstrap/bundled/commands/flux/exec.md +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/flux_bootstrap/bundled/commands/flux/new.md +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/flux_bootstrap/bundled/commands/flux/qa.md +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/flux_bootstrap/bundled/commands/flux/rebase.md +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/flux_bootstrap/bundled/commands/flux/review.md +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/flux_bootstrap/bundled/commands/flux/split.md +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/flux_bootstrap/bundled/commands/flux/squash-commits.md +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/flux_bootstrap/bundled/commands/flux/status.md +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/flux_bootstrap/bundled/commands/flux/tests.md +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/flux_bootstrap/bundled/scripts/flux_about.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/flux_bootstrap/bundled/scripts/flux_cheatsheet.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/flux_bootstrap/bundled/scripts/flux_status.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/flux_bootstrap/installer.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/flux_bootstrap/register_callbacks.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/force_push_guard/__init__.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/force_push_guard/detector.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/force_push_guard/register_callbacks.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/force_push_guard/test_detector.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/fork/__init__.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/fork/register_callbacks.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/frontend_emitter/__init__.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/frontend_emitter/emitter.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/frontend_emitter/register_callbacks.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/frontend_emitter/session_context.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/grok_oauth/__init__.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/grok_oauth/config.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/grok_oauth/oauth_flow.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/grok_oauth/register_callbacks.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/grok_oauth/test_plugin.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/grok_oauth/utils.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/herdr/README.md +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/herdr/__init__.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/herdr/client.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/herdr/register_callbacks.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/herdr/reporter.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/hook_creator/__init__.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/hook_creator/register_callbacks.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/hook_manager/__init__.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/hook_manager/config.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/hook_manager/hooks_menu.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/hook_manager/register_callbacks.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/no_tools/__init__.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/no_tools/register_callbacks.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/oauth_pasteback.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/oauth_puppy_html.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/obsidian_agent/README.md +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/obsidian_agent/__init__.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/obsidian_agent/agent_obsidian.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/obsidian_agent/register_callbacks.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/ollama/__init__.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/ollama/register_callbacks.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/ollama_setup/__init__.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/ollama_setup/completer.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/ollama_setup/register_callbacks.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/plugin_list/__init__.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/plugin_list/plugin_contributions.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/plugin_list/plugin_meta.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/plugin_list/plugin_text_utils.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/plugin_list/plugins_menu.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/plugin_list/plugins_menu_layout.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/plugin_list/plugins_menu_render.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/plugin_list/project_trust_flow.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/plugin_list/register_callbacks.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/pop_command/__init__.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/pop_command/register_callbacks.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/prompt_newline/__init__.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/prompt_newline/config.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/prompt_newline/register_callbacks.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/prune/__init__.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/prune/prune_menu.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/prune/prune_model.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/prune/prune_render.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/prune/register_callbacks.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/puppy_kennel/README.md +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/puppy_kennel/__init__.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/puppy_kennel/commands.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/puppy_kennel/config.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/puppy_kennel/kennel.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/puppy_kennel/packer.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/puppy_kennel/recorder.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/puppy_kennel/register_callbacks.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/puppy_kennel/retriever.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/puppy_kennel/schema.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/puppy_kennel/state.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/puppy_kennel/tools.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/puppy_kennel/wings.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/puppy_spinner/README.md +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/puppy_spinner/__init__.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/puppy_spinner/builtin_frames.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/puppy_spinner/commands.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/puppy_spinner/picker.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/puppy_spinner/register_callbacks.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/puppy_spinner/spinners.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/quick_resume/__init__.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/quick_resume/register_callbacks.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/review_pr/__init__.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/review_pr/register_callbacks.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/shell_safety/__init__.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/shell_safety/agent_shell_safety.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/shell_safety/command_cache.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/shell_safety/register_callbacks.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/stack_dump/__init__.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/stack_dump/register_callbacks.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/statusline/__init__.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/statusline/config.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/statusline/payload.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/statusline/prompt_patch.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/statusline/register_callbacks.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/statusline/runner.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/statusline/statusline_command.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/steer_queue/__init__.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/steer_queue/queue_menu.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/steer_queue/register_callbacks.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/subagent_panel/README.md +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/subagent_panel/__init__.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/subagent_panel/coalesce_patch.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/subagent_panel/panel_render.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/subagent_panel/register_callbacks.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/subagent_panel/resume_repaint.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/subagent_panel/state.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/switch_agent_resume/__init__.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/switch_agent_resume/register_callbacks.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/theme/README.md +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/theme/__init__.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/theme/bundled_palettes.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/theme/content_styles.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/theme/osc_palette.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/theme/picker.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/theme/prompt_toolkit_theme.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/theme/register_callbacks.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/theme/rich_themes.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/theme/themes.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/token_ratio_learner/__init__.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/token_ratio_learner/ratios.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/token_ratio_learner/register_callbacks.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/trust.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/trust_notice.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/universal_constructor/__init__.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/universal_constructor/models.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/universal_constructor/register_callbacks.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/universal_constructor/registry.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/universal_constructor/sandbox.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/wide_completion_menu/__init__.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/wide_completion_menu/register_callbacks.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/wiggum/__init__.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/wiggum/judge.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/wiggum/judge_config.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/wiggum/register_callbacks.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/wiggum/state.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/yolo_cli/__init__.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/yolo_cli/register_callbacks.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/provider_credentials.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/provider_identity.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/pydantic_patches.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/reopenable_async_client.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/round_robin_model.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/secret_store.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/secret_store_backends.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/session_lifecycle.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/session_migration.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/session_storage.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/status_display.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/summarization_agent.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/terminal_utils.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/tools/__init__.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/tools/agent_tools.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/tools/ask_user_question/__init__.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/tools/ask_user_question/constants.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/tools/ask_user_question/demo_tui.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/tools/ask_user_question/handler.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/tools/ask_user_question/models.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/tools/ask_user_question/registration.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/tools/ask_user_question/renderers.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/tools/ask_user_question/terminal_ui.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/tools/ask_user_question/theme.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/tools/ask_user_question/tui_loop.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/tools/browser/__init__.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/tools/browser/browser_control.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/tools/browser/browser_interactions.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/tools/browser/browser_locator_resolver.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/tools/browser/browser_locators.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/tools/browser/browser_manager.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/tools/browser/browser_navigation.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/tools/browser/browser_page_snapshot.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/tools/browser/browser_screenshot.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/tools/browser/browser_scripts.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/tools/browser/browser_semantic_interactions.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/tools/browser/browser_workflows.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/tools/command_runner.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/tools/common.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/tools/display.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/tools/file_modifications.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/tools/file_operations.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/tools/fs_access.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/tools/image_tools.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/tools/io_backends.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/tools/model_tools.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/tools/shell_backgrounding.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/tools/skills_tools.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/tools/subagent_context.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/tools/subagent_invocation.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/tools/tools_content.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/tools/universal_constructor.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/undo_manager.py +0 -0
- {code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/version_checker.py +0 -0
|
@@ -83,6 +83,20 @@ SETTING_DEFINITIONS: Dict[str, Dict] = {
|
|
|
83
83
|
"choices": ["minimal", "low", "medium", "high", "xhigh", "ultra"],
|
|
84
84
|
"default": "medium",
|
|
85
85
|
},
|
|
86
|
+
"reasoning_context": {
|
|
87
|
+
"name": "Reasoning Context",
|
|
88
|
+
"description": "Controls which prior reasoning is retained for GPT-5.6 Responses models. All turns preserves reasoning across the conversation.",
|
|
89
|
+
"type": "choice",
|
|
90
|
+
"choices": ["all_turns", "current_turn", "auto"],
|
|
91
|
+
"default": "all_turns",
|
|
92
|
+
},
|
|
93
|
+
"reasoning_mode": {
|
|
94
|
+
"name": "Reasoning Mode",
|
|
95
|
+
"description": "Controls the GPT-5.6 reasoning mode. Standard is the default; Pro spends more compute and is only available on supported variants.",
|
|
96
|
+
"type": "choice",
|
|
97
|
+
"choices": ["standard", "pro"],
|
|
98
|
+
"default": "standard",
|
|
99
|
+
},
|
|
86
100
|
"summary": {
|
|
87
101
|
"name": "Reasoning Summary",
|
|
88
102
|
"description": "Controls whether OpenAI Responses models return auto, concise, or detailed reasoning summaries.",
|
|
@@ -267,6 +281,10 @@ def _get_model_display_settings(model_name: str) -> Dict:
|
|
|
267
281
|
|
|
268
282
|
if model_supports_setting(model_name, "reasoning_effort"):
|
|
269
283
|
settings["reasoning_effort"] = get_openai_reasoning_effort()
|
|
284
|
+
if model_supports_setting(model_name, "reasoning_context"):
|
|
285
|
+
settings.setdefault("reasoning_context", "all_turns")
|
|
286
|
+
if model_supports_setting(model_name, "reasoning_mode"):
|
|
287
|
+
settings.setdefault("reasoning_mode", "standard")
|
|
270
288
|
if model_supports_setting(model_name, "summary"):
|
|
271
289
|
settings["summary"] = get_openai_reasoning_summary()
|
|
272
290
|
if model_supports_setting(model_name, "verbosity"):
|
|
@@ -689,12 +689,22 @@ def model_supports_setting(model_name: str, setting: str) -> bool:
|
|
|
689
689
|
|
|
690
690
|
if supports_glm_reasoning_effort(model_name):
|
|
691
691
|
return True
|
|
692
|
+
if setting in ("reasoning_context", "reasoning_mode"):
|
|
693
|
+
# OpenAI added these Responses API controls with GPT-5.6. Capability
|
|
694
|
+
# detection belongs here so injected/custom 5.6 model definitions do
|
|
695
|
+
# not all need to duplicate the same supported_settings metadata.
|
|
696
|
+
if "gpt-5.6" in model_name.lower():
|
|
697
|
+
return True
|
|
692
698
|
|
|
693
699
|
try:
|
|
694
700
|
from code_puppy.model_factory import ModelFactory
|
|
695
701
|
|
|
696
702
|
models_config = ModelFactory.load_config()
|
|
697
703
|
model_config = models_config.get(model_name, {})
|
|
704
|
+
if setting in ("reasoning_context", "reasoning_mode"):
|
|
705
|
+
underlying_name = str(model_config.get("name", "")).lower()
|
|
706
|
+
if "gpt-5.6" in underlying_name:
|
|
707
|
+
return True
|
|
698
708
|
|
|
699
709
|
# Get supported_settings list, default to supporting common settings
|
|
700
710
|
supported_settings = model_config.get("supported_settings")
|
|
@@ -109,5 +109,17 @@
|
|
|
109
109
|
"cfg.colors.all_available": "\ud83c\udfa8 All Available Rich Colors:",
|
|
110
110
|
"cfg.colors.usage": "Usage: /diff {{color_type}} <color_name>",
|
|
111
111
|
"cfg.colors.white_text_note": "All diffs use white text on your chosen background colors",
|
|
112
|
-
"cfg.colors.hex_note": "You can also use hex colors like #ff0000 or rgb(255,0,0)"
|
|
112
|
+
"cfg.colors.hex_note": "You can also use hex colors like #ff0000 or rgb(255,0,0)",
|
|
113
|
+
"codex.imagegen.prompt_required": "A prompt is required.",
|
|
114
|
+
"codex.imagegen.auth_required": "Codex OAuth authentication is required. Run /codex-auth first.",
|
|
115
|
+
"codex.imagegen.request_failed": "Codex image generation request failed{detail}",
|
|
116
|
+
"codex.imagegen.invalid_json": "Codex image generation returned invalid JSON.",
|
|
117
|
+
"codex.imagegen.invalid_response": "Codex image generation returned an invalid response.",
|
|
118
|
+
"codex.imagegen.no_data": "Codex image generation returned no image data.",
|
|
119
|
+
"codex.imagegen.malformed_data": "Codex image generation returned malformed image data.",
|
|
120
|
+
"codex.imagegen.save_failed": "Could not save the generated image.",
|
|
121
|
+
"codex.imagegen.usage": "Usage: /codex-imagegen <prompt>",
|
|
122
|
+
"codex.imagegen.generating": "Generating image with Codex OAuth...",
|
|
123
|
+
"codex.imagegen.saved": "Generated image saved to {path}",
|
|
124
|
+
"codex.logout.reload_failed": "ChatGPT logout: agent reload failed: {error}"
|
|
113
125
|
}
|
|
@@ -311,6 +311,26 @@ def make_model_settings(
|
|
|
311
311
|
)
|
|
312
312
|
if "codex" not in model_name:
|
|
313
313
|
model_settings_dict["openai_text_verbosity"] = get_openai_verbosity()
|
|
314
|
+
|
|
315
|
+
underlying_name = str(model_config.get("name", "")).lower()
|
|
316
|
+
is_gpt_5_6 = "gpt-5.6" in model_name.lower() or "gpt-5.6" in underlying_name
|
|
317
|
+
if is_gpt_5_6:
|
|
318
|
+
# pydantic-ai 1.56 does not expose context/mode settings yet,
|
|
319
|
+
# although the OpenAI SDK does. Supply the complete reasoning
|
|
320
|
+
# object through extra_body; a partial object would overwrite
|
|
321
|
+
# pydantic-ai's generated effort/summary payload.
|
|
322
|
+
reasoning = {
|
|
323
|
+
"effort": model_settings_dict.pop("openai_reasoning_effort"),
|
|
324
|
+
"summary": model_settings_dict.pop("openai_reasoning_summary"),
|
|
325
|
+
"context": effective_settings.get("reasoning_context", "all_turns"),
|
|
326
|
+
"mode": effective_settings.get("reasoning_mode", "standard"),
|
|
327
|
+
}
|
|
328
|
+
extra_body = dict(model_settings_dict.get("extra_body") or {})
|
|
329
|
+
extra_body["reasoning"] = reasoning
|
|
330
|
+
model_settings_dict["extra_body"] = extra_body
|
|
331
|
+
model_settings_dict.pop("reasoning_context", None)
|
|
332
|
+
model_settings_dict.pop("reasoning_mode", None)
|
|
333
|
+
|
|
314
334
|
model_settings = OpenAIResponsesModelSettings(**model_settings_dict)
|
|
315
335
|
else:
|
|
316
336
|
# Chat Completions models don't support configurable reasoning summaries.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: codex-imagegen
|
|
3
|
+
description: Generate raster images with gpt-image-2 through Codex OAuth. Activate when the user asks to create a photo, illustration, icon, sprite, texture, product image, banner, or other raster artwork.
|
|
4
|
+
version: "1.0"
|
|
5
|
+
author: code-puppy
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Codex Image Generation
|
|
9
|
+
|
|
10
|
+
Use the `codex_imagegen` tool when the user asks you to create raster artwork.
|
|
11
|
+
The tool uses `gpt-image-2` through the user's existing Codex OAuth session,
|
|
12
|
+
saves the resulting PNG, and displays it inline when iTerm2 supports doing so.
|
|
13
|
+
|
|
14
|
+
## Decision rules
|
|
15
|
+
|
|
16
|
+
1. Generate an image when creation of a photo, illustration, icon, sprite,
|
|
17
|
+
texture, product image, banner, concept art, or similar raster asset is an
|
|
18
|
+
explicit part of the user's request.
|
|
19
|
+
2. Do not generate an image merely because one might decorate an otherwise
|
|
20
|
+
unrelated answer.
|
|
21
|
+
3. Prefer ordinary code tools for diagrams that should remain editable as
|
|
22
|
+
source, such as Mermaid, SVG, charts, or HTML/CSS layouts.
|
|
23
|
+
4. Before calling the tool, turn the user's request into a complete standalone
|
|
24
|
+
visual prompt. Include subject, composition, style, lighting, colors,
|
|
25
|
+
perspective, mood, and important exclusions when those details are known.
|
|
26
|
+
5. Do not claim that generation succeeded until the tool returns `success: true`.
|
|
27
|
+
6. Report the saved path after success. The image may already be visible inline,
|
|
28
|
+
so do not redundantly embed it unless the user asks.
|
|
29
|
+
7. If authentication is missing, tell the user to run `/codex-auth`.
|
|
30
|
+
|
|
31
|
+
## Tool
|
|
32
|
+
|
|
33
|
+
Call:
|
|
34
|
+
|
|
35
|
+
```text
|
|
36
|
+
codex_imagegen(prompt="A complete standalone image prompt")
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
The result contains:
|
|
40
|
+
|
|
41
|
+
- `success`: whether generation completed
|
|
42
|
+
- `path`: saved PNG path on success
|
|
43
|
+
- `displayed_inline`: whether iTerm2 inline display was attempted successfully
|
|
44
|
+
- `error`: safe failure text when generation fails
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
"""Image generation through the ChatGPT Codex OAuth backend."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import base64
|
|
6
|
+
import binascii
|
|
7
|
+
import os
|
|
8
|
+
import sys
|
|
9
|
+
import uuid
|
|
10
|
+
from pathlib import Path
|
|
11
|
+
from typing import Any
|
|
12
|
+
|
|
13
|
+
import requests
|
|
14
|
+
|
|
15
|
+
from code_puppy import config
|
|
16
|
+
from code_puppy.i18n import t
|
|
17
|
+
|
|
18
|
+
from .config import CHATGPT_OAUTH_CONFIG
|
|
19
|
+
from .utils import get_valid_access_token, load_stored_tokens
|
|
20
|
+
|
|
21
|
+
_IMAGE_MODEL = "gpt-image-2"
|
|
22
|
+
_REQUEST_TIMEOUT_SECONDS = 180
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class CodexImageGenerationError(RuntimeError):
|
|
26
|
+
"""A safe, user-displayable image generation failure."""
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def generate_image(prompt: str) -> Path:
|
|
30
|
+
"""Generate one image with Codex OAuth and save it under Code Puppy data."""
|
|
31
|
+
normalized_prompt = prompt.strip()
|
|
32
|
+
if not normalized_prompt:
|
|
33
|
+
raise CodexImageGenerationError(t("codex.imagegen.prompt_required"))
|
|
34
|
+
|
|
35
|
+
access_token = get_valid_access_token()
|
|
36
|
+
tokens = load_stored_tokens() or {}
|
|
37
|
+
account_id = str(tokens.get("account_id", "")).strip()
|
|
38
|
+
if not access_token or not account_id:
|
|
39
|
+
raise CodexImageGenerationError(t("codex.imagegen.auth_required"))
|
|
40
|
+
|
|
41
|
+
response = _post_generation_request(access_token, account_id, normalized_prompt)
|
|
42
|
+
image_bytes = _decode_first_image(response)
|
|
43
|
+
return _save_image(image_bytes)
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def _post_generation_request(
|
|
47
|
+
access_token: str, account_id: str, prompt: str
|
|
48
|
+
) -> dict[str, Any]:
|
|
49
|
+
base_url = str(CHATGPT_OAUTH_CONFIG["api_base_url"]).rstrip("/")
|
|
50
|
+
headers = {
|
|
51
|
+
"Authorization": f"Bearer {access_token}",
|
|
52
|
+
"ChatGPT-Account-Id": account_id,
|
|
53
|
+
"Accept": "application/json",
|
|
54
|
+
"Content-Type": "application/json",
|
|
55
|
+
"originator": CHATGPT_OAUTH_CONFIG.get("originator", "codex_cli_rs"),
|
|
56
|
+
"User-Agent": (
|
|
57
|
+
f"{CHATGPT_OAUTH_CONFIG.get('originator', 'codex_cli_rs')}/"
|
|
58
|
+
f"{CHATGPT_OAUTH_CONFIG.get('client_version', 'unknown')}"
|
|
59
|
+
),
|
|
60
|
+
}
|
|
61
|
+
payload = {
|
|
62
|
+
"prompt": prompt,
|
|
63
|
+
"background": "auto",
|
|
64
|
+
"model": _IMAGE_MODEL,
|
|
65
|
+
"quality": "auto",
|
|
66
|
+
"size": "auto",
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
try:
|
|
70
|
+
response = requests.post(
|
|
71
|
+
f"{base_url}/images/generations",
|
|
72
|
+
headers=headers,
|
|
73
|
+
json=payload,
|
|
74
|
+
timeout=_REQUEST_TIMEOUT_SECONDS,
|
|
75
|
+
)
|
|
76
|
+
response.raise_for_status()
|
|
77
|
+
body = response.json()
|
|
78
|
+
except requests.RequestException as exc:
|
|
79
|
+
detail = _response_error_detail(getattr(exc, "response", None))
|
|
80
|
+
suffix = f": {detail}" if detail else ""
|
|
81
|
+
raise CodexImageGenerationError(
|
|
82
|
+
t("codex.imagegen.request_failed", detail=suffix)
|
|
83
|
+
) from exc
|
|
84
|
+
except ValueError as exc:
|
|
85
|
+
raise CodexImageGenerationError(t("codex.imagegen.invalid_json")) from exc
|
|
86
|
+
|
|
87
|
+
if not isinstance(body, dict):
|
|
88
|
+
raise CodexImageGenerationError(t("codex.imagegen.invalid_response"))
|
|
89
|
+
return body
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
def _response_error_detail(response: requests.Response | None) -> str:
|
|
93
|
+
if response is None:
|
|
94
|
+
return ""
|
|
95
|
+
try:
|
|
96
|
+
body = response.json()
|
|
97
|
+
except ValueError:
|
|
98
|
+
return response.text.strip()[:300]
|
|
99
|
+
if not isinstance(body, dict):
|
|
100
|
+
return ""
|
|
101
|
+
error = body.get("error")
|
|
102
|
+
if isinstance(error, dict):
|
|
103
|
+
return str(error.get("message", ""))[:300]
|
|
104
|
+
return str(error or body.get("detail", ""))[:300]
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
def _decode_first_image(body: dict[str, Any]) -> bytes:
|
|
108
|
+
data = body.get("data")
|
|
109
|
+
encoded = data[0].get("b64_json") if isinstance(data, list) and data else None
|
|
110
|
+
if not isinstance(encoded, str) or not encoded:
|
|
111
|
+
raise CodexImageGenerationError(t("codex.imagegen.no_data"))
|
|
112
|
+
try:
|
|
113
|
+
return base64.b64decode(encoded, validate=True)
|
|
114
|
+
except (binascii.Error, ValueError) as exc:
|
|
115
|
+
raise CodexImageGenerationError(t("codex.imagegen.malformed_data")) from exc
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
def emit_iterm_image(output_path: Path) -> bool:
|
|
119
|
+
"""Display a saved image with iTerm2's OSC 1337 inline-image protocol."""
|
|
120
|
+
if not _is_iterm2() or not sys.stdout.isatty():
|
|
121
|
+
return False
|
|
122
|
+
|
|
123
|
+
try:
|
|
124
|
+
image_data = base64.b64encode(output_path.read_bytes()).decode("ascii")
|
|
125
|
+
encoded_name = base64.b64encode(output_path.name.encode()).decode("ascii")
|
|
126
|
+
sequence = (
|
|
127
|
+
f"\033]1337;File=name={encoded_name};inline=1;"
|
|
128
|
+
f"preserveAspectRatio=1:{image_data}\a\n"
|
|
129
|
+
)
|
|
130
|
+
from code_puppy.messaging.run_ui import suspended_run_ui
|
|
131
|
+
|
|
132
|
+
with suspended_run_ui():
|
|
133
|
+
sys.stdout.write(sequence)
|
|
134
|
+
sys.stdout.flush()
|
|
135
|
+
except Exception:
|
|
136
|
+
# Inline display is best-effort; the image remains safely saved even if
|
|
137
|
+
# terminal detection lied or the active UI cannot be suspended.
|
|
138
|
+
return False
|
|
139
|
+
return True
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
def _is_iterm2() -> bool:
|
|
143
|
+
return bool(
|
|
144
|
+
os.environ.get("ITERM_SESSION_ID")
|
|
145
|
+
or os.environ.get("TERM_PROGRAM", "").lower() == "iterm.app"
|
|
146
|
+
)
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
def _save_image(image_bytes: bytes) -> Path:
|
|
150
|
+
output_dir = Path(config.DATA_DIR) / "generated_images"
|
|
151
|
+
output_dir.mkdir(parents=True, exist_ok=True, mode=0o700)
|
|
152
|
+
output_path = output_dir / f"codex-{uuid.uuid4().hex}.png"
|
|
153
|
+
temporary_path = output_path.with_suffix(".tmp")
|
|
154
|
+
try:
|
|
155
|
+
temporary_path.write_bytes(image_bytes)
|
|
156
|
+
os.chmod(temporary_path, 0o600)
|
|
157
|
+
temporary_path.replace(output_path)
|
|
158
|
+
except OSError as exc:
|
|
159
|
+
temporary_path.unlink(missing_ok=True)
|
|
160
|
+
raise CodexImageGenerationError(t("codex.imagegen.save_failed")) from exc
|
|
161
|
+
return output_path
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"""Agent-facing Codex OAuth image-generation tool."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import asyncio
|
|
6
|
+
from typing import Any
|
|
7
|
+
|
|
8
|
+
from pydantic_ai import RunContext
|
|
9
|
+
|
|
10
|
+
from .image_generation import (
|
|
11
|
+
CodexImageGenerationError,
|
|
12
|
+
emit_iterm_image,
|
|
13
|
+
generate_image,
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
TOOL_NAME = "codex_imagegen"
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def register_codex_imagegen(agent: Any) -> None:
|
|
20
|
+
"""Register image generation on a pydantic-ai agent."""
|
|
21
|
+
|
|
22
|
+
@agent.tool
|
|
23
|
+
async def codex_imagegen(context: RunContext, prompt: str) -> dict[str, Any]:
|
|
24
|
+
"""Generate a raster image using gpt-image-2 and Codex OAuth.
|
|
25
|
+
|
|
26
|
+
Use this when the user asks you to create a photo, illustration, icon,
|
|
27
|
+
sprite, texture, product image, banner, or other raster artwork. Write a
|
|
28
|
+
complete standalone visual prompt because the image model does not see
|
|
29
|
+
the conversation. The PNG is saved automatically and displayed inline
|
|
30
|
+
in iTerm2 when supported.
|
|
31
|
+
|
|
32
|
+
Args:
|
|
33
|
+
prompt: Detailed standalone description of the image to generate.
|
|
34
|
+
"""
|
|
35
|
+
del context
|
|
36
|
+
try:
|
|
37
|
+
output_path = await asyncio.to_thread(generate_image, prompt)
|
|
38
|
+
except CodexImageGenerationError as exc:
|
|
39
|
+
return {"success": False, "error": str(exc)}
|
|
40
|
+
|
|
41
|
+
displayed_inline = emit_iterm_image(output_path)
|
|
42
|
+
return {
|
|
43
|
+
"success": True,
|
|
44
|
+
"path": str(output_path),
|
|
45
|
+
"displayed_inline": displayed_inline,
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def register_tools_callback() -> list[dict[str, Any]]:
|
|
50
|
+
return [{"name": TOOL_NAME, "register_func": register_codex_imagegen}]
|
{code_puppy-0.0.652 → code_puppy-0.0.653}/code_puppy/plugins/chatgpt_oauth/register_callbacks.py
RENAMED
|
@@ -7,10 +7,12 @@ the 'chatgpt_oauth' model type handler.
|
|
|
7
7
|
from __future__ import annotations
|
|
8
8
|
|
|
9
9
|
import os
|
|
10
|
+
from pathlib import Path
|
|
10
11
|
from typing import Any, Dict, List, Optional, Tuple
|
|
11
12
|
|
|
12
13
|
from code_puppy.callbacks import register_callback
|
|
13
|
-
from code_puppy.
|
|
14
|
+
from code_puppy.i18n import t
|
|
15
|
+
from code_puppy.messaging import emit_error, emit_info, emit_success, emit_warning
|
|
14
16
|
from code_puppy.model_switching import set_model_and_reload_agent
|
|
15
17
|
|
|
16
18
|
from .config import CHATGPT_OAUTH_CONFIG, get_token_storage_path
|
|
@@ -38,6 +40,7 @@ def _custom_help() -> List[Tuple[str, str]]:
|
|
|
38
40
|
("codex-status", "Alias for /chatgpt-status"),
|
|
39
41
|
("chatgpt-logout", "Remove ChatGPT OAuth tokens and imported models"),
|
|
40
42
|
("codex-logout", "Alias for /chatgpt-logout"),
|
|
43
|
+
("codex-imagegen <prompt>", "Generate an image with Codex OAuth"),
|
|
41
44
|
]
|
|
42
45
|
|
|
43
46
|
|
|
@@ -68,6 +71,8 @@ def _handle_chatgpt_status() -> None:
|
|
|
68
71
|
|
|
69
72
|
|
|
70
73
|
def _handle_chatgpt_logout() -> None:
|
|
74
|
+
was_authenticated = _is_codex_oauth_authenticated()
|
|
75
|
+
|
|
71
76
|
token_path = get_token_storage_path()
|
|
72
77
|
if token_path.exists():
|
|
73
78
|
token_path.unlink()
|
|
@@ -82,6 +87,36 @@ def _handle_chatgpt_logout() -> None:
|
|
|
82
87
|
|
|
83
88
|
emit_success("ChatGPT logout complete")
|
|
84
89
|
|
|
90
|
+
if was_authenticated:
|
|
91
|
+
_reload_active_agent()
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
def _is_codex_oauth_authenticated() -> bool:
|
|
95
|
+
"""Whether Codex OAuth tokens are present on disk."""
|
|
96
|
+
tokens = load_stored_tokens()
|
|
97
|
+
return bool(tokens and tokens.get("access_token") and tokens.get("account_id"))
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
def _reload_active_agent() -> None:
|
|
101
|
+
"""Reload the active agent so tool advertisement changes take effect."""
|
|
102
|
+
from code_puppy.agents import get_current_agent
|
|
103
|
+
|
|
104
|
+
try:
|
|
105
|
+
current_agent = get_current_agent()
|
|
106
|
+
except Exception:
|
|
107
|
+
return
|
|
108
|
+
if current_agent is None:
|
|
109
|
+
return
|
|
110
|
+
try:
|
|
111
|
+
if hasattr(current_agent, "refresh_config"):
|
|
112
|
+
try:
|
|
113
|
+
current_agent.refresh_config()
|
|
114
|
+
except Exception:
|
|
115
|
+
pass
|
|
116
|
+
current_agent.reload_code_generation_agent()
|
|
117
|
+
except Exception as exc:
|
|
118
|
+
emit_warning(t("codex.logout.reload_failed", error=str(exc)))
|
|
119
|
+
|
|
85
120
|
|
|
86
121
|
def _handle_custom_command(command: str, name: str) -> Optional[bool]:
|
|
87
122
|
if not name:
|
|
@@ -100,6 +135,27 @@ def _handle_custom_command(command: str, name: str) -> Optional[bool]:
|
|
|
100
135
|
_handle_chatgpt_logout()
|
|
101
136
|
return True
|
|
102
137
|
|
|
138
|
+
if name == "codex-imagegen":
|
|
139
|
+
from .image_generation import (
|
|
140
|
+
CodexImageGenerationError,
|
|
141
|
+
emit_iterm_image,
|
|
142
|
+
generate_image,
|
|
143
|
+
)
|
|
144
|
+
|
|
145
|
+
_, _, prompt = command.partition(" ")
|
|
146
|
+
if not prompt.strip():
|
|
147
|
+
emit_warning(t("codex.imagegen.usage"))
|
|
148
|
+
return True
|
|
149
|
+
emit_info(t("codex.imagegen.generating"))
|
|
150
|
+
try:
|
|
151
|
+
output_path = generate_image(prompt)
|
|
152
|
+
except CodexImageGenerationError as exc:
|
|
153
|
+
emit_error(str(exc))
|
|
154
|
+
else:
|
|
155
|
+
emit_success(t("codex.imagegen.saved", path=str(output_path)))
|
|
156
|
+
emit_iterm_image(output_path)
|
|
157
|
+
return True
|
|
158
|
+
|
|
103
159
|
return None
|
|
104
160
|
|
|
105
161
|
|
|
@@ -171,6 +227,28 @@ def _create_chatgpt_oauth_model(
|
|
|
171
227
|
return OpenAIResponsesModel(model_name=model_config["name"], provider=provider)
|
|
172
228
|
|
|
173
229
|
|
|
230
|
+
def _register_imagegen_skill() -> list[dict[str, str]]:
|
|
231
|
+
return [
|
|
232
|
+
{
|
|
233
|
+
"name": "codex-imagegen",
|
|
234
|
+
"skill_md_path": str(Path(__file__).with_name("IMAGEGEN_SKILL.md")),
|
|
235
|
+
}
|
|
236
|
+
]
|
|
237
|
+
|
|
238
|
+
|
|
239
|
+
def _register_imagegen_tools() -> list[dict[str, Any]]:
|
|
240
|
+
from .image_tool import register_tools_callback
|
|
241
|
+
|
|
242
|
+
return register_tools_callback()
|
|
243
|
+
|
|
244
|
+
|
|
245
|
+
def _advertise_imagegen_tool(agent_name: str | None = None) -> list[str]:
|
|
246
|
+
del agent_name
|
|
247
|
+
if not _is_codex_oauth_authenticated():
|
|
248
|
+
return []
|
|
249
|
+
return ["codex_imagegen"]
|
|
250
|
+
|
|
251
|
+
|
|
174
252
|
def _register_model_types() -> List[Dict[str, Any]]:
|
|
175
253
|
"""Register the chatgpt_oauth model type handler."""
|
|
176
254
|
return [{"type": "chatgpt_oauth", "handler": _create_chatgpt_oauth_model}]
|
|
@@ -192,4 +270,7 @@ def _refresh_usage_on_agent_run(
|
|
|
192
270
|
register_callback("custom_command_help", _custom_help)
|
|
193
271
|
register_callback("custom_command", _handle_custom_command)
|
|
194
272
|
register_callback("register_model_type", _register_model_types)
|
|
273
|
+
register_callback("register_skills", _register_imagegen_skill)
|
|
274
|
+
register_callback("register_tools", _register_imagegen_tools)
|
|
275
|
+
register_callback("register_agent_tools", _advertise_imagegen_tool)
|
|
195
276
|
register_callback("agent_run_start", _refresh_usage_on_agent_run)
|