code-puppy 0.0.548__tar.gz → 0.0.549__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.548 → code_puppy-0.0.549}/PKG-INFO +1 -1
- code_puppy-0.0.549/code_puppy/command_line/config_apply.py +129 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/config_commands.py +73 -56
- code_puppy-0.0.549/code_puppy/command_line/set_menu.py +532 -0
- code_puppy-0.0.549/code_puppy/command_line/set_menu_catalog.py +593 -0
- code_puppy-0.0.549/code_puppy/command_line/set_menu_render.py +194 -0
- code_puppy-0.0.549/code_puppy/command_line/set_menu_schema.py +33 -0
- code_puppy-0.0.549/code_puppy/command_line/set_menu_settings.py +26 -0
- code_puppy-0.0.549/code_puppy/command_line/set_menu_shims.py +49 -0
- code_puppy-0.0.549/code_puppy/command_line/set_menu_values.py +126 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/pyproject.toml +1 -1
- {code_puppy-0.0.548 → code_puppy-0.0.549}/.gitignore +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/LICENSE +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/README.md +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/__init__.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/__main__.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/agents/__init__.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/agents/_builder.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/agents/_compaction.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/agents/_diagnostics.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/agents/_history.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/agents/_key_listeners.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/agents/_non_streaming_render.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/agents/_run_signals.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/agents/_runtime.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/agents/_steer_processor.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/agents/agent_code_puppy.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/agents/agent_creator_agent.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/agents/agent_helios.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/agents/agent_manager.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/agents/agent_planning.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/agents/agent_qa_kitten.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/agents/base_agent.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/agents/event_stream_handler.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/agents/json_agent.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/agents/run_stats.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/agents/smooth_stream.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/agents/subagent_stream_handler.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/callbacks.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/chatgpt_codex_client.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/claude_cache_client.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/cli_runner.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/__init__.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/add_model_menu.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/agent_menu.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/attachments.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/autosave_menu.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/clipboard.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/colors_menu.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/command_handler.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/command_registry.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/core_commands.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/diff_menu.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/file_index.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/file_path_completion.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/judges_menu.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/load_context_completion.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/mcp/__init__.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/mcp/base.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/mcp/catalog_server_installer.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/mcp/custom_server_form.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/mcp/custom_server_installer.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/mcp/edit_command.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/mcp/handler.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/mcp/help_command.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/mcp/install_command.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/mcp/install_menu.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/mcp/list_command.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/mcp/logs_command.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/mcp/remove_command.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/mcp/restart_command.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/mcp/search_command.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/mcp/silence_warning_command.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/mcp/start_all_command.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/mcp/start_command.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/mcp/status_command.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/mcp/stop_all_command.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/mcp/stop_command.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/mcp/utils.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/mcp/wizard_utils.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/mcp_binding_menu.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/mcp_completion.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/model_picker_completion.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/model_settings_menu.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/onboarding_slides.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/onboarding_wizard.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/pagination.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/pin_command_completion.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/prompt_toolkit_completion.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/session_commands.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/shell_passthrough.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/skills_completion.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/uc_menu.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/utils.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/command_line/wiggum_state.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/config.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/error_logging.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/gemini_code_assist.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/gemini_model.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/hook_engine/README.md +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/hook_engine/__init__.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/hook_engine/aliases.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/hook_engine/engine.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/hook_engine/executor.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/hook_engine/matcher.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/hook_engine/models.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/hook_engine/registry.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/hook_engine/validator.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/http_utils.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/keymap.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/list_filtering.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/main.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/mcp_/__init__.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/mcp_/agent_bindings.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/mcp_/async_lifecycle.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/mcp_/blocking_startup.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/mcp_/captured_stdio_server.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/mcp_/circuit_breaker.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/mcp_/config_wizard.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/mcp_/dashboard.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/mcp_/error_isolation.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/mcp_/examples/retry_example.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/mcp_/health_monitor.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/mcp_/managed_server.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/mcp_/manager.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/mcp_/mcp_logs.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/mcp_/registry.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/mcp_/retry_manager.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/mcp_/server_registry_catalog.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/mcp_/status_tracker.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/mcp_/system_tools.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/mcp_prompts/__init__.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/mcp_prompts/hook_creator.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/messaging/__init__.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/messaging/bus.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/messaging/commands.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/messaging/markdown_patches.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/messaging/message_queue.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/messaging/messages.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/messaging/pause_controller.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/messaging/queue_console.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/messaging/renderers.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/messaging/rich_renderer.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/messaging/spinner/__init__.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/messaging/spinner/console_spinner.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/messaging/spinner/spinner_base.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/messaging/subagent_console.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/model_descriptions.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/model_factory.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/model_switching.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/model_utils.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/models.json +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/models_dev_api.json +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/models_dev_parser.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/__init__.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/agent_skills/__init__.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/agent_skills/config.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/agent_skills/discovery.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/agent_skills/downloader.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/agent_skills/enabled_skills.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/agent_skills/installer.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/agent_skills/metadata.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/agent_skills/prompt_builder.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/agent_skills/register_callbacks.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/agent_skills/remote_catalog.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/agent_skills/skill_catalog.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/agent_skills/skill_commands.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/agent_skills/skills_install_menu.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/agent_skills/skills_menu.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/agent_steering/README.md +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/agent_steering/__init__.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/agent_steering/register_callbacks.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/agent_steering/steering_prompt.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/aws_bedrock/__init__.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/aws_bedrock/config.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/aws_bedrock/register_callbacks.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/aws_bedrock/utils.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/azure_foundry/README.md +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/azure_foundry/__init__.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/azure_foundry/config.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/azure_foundry/discovery.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/azure_foundry/register_callbacks.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/azure_foundry/token.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/azure_foundry/utils.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/chatgpt_oauth/__init__.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/chatgpt_oauth/config.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/chatgpt_oauth/oauth_flow.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/chatgpt_oauth/register_callbacks.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/chatgpt_oauth/test_plugin.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/chatgpt_oauth/utils.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/claude_code_hooks/__init__.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/claude_code_hooks/config.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/claude_code_hooks/register_callbacks.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/claude_code_oauth/README.md +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/claude_code_oauth/SETUP.md +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/claude_code_oauth/__init__.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/claude_code_oauth/config.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/claude_code_oauth/fast_mode.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/claude_code_oauth/prompt_handler.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/claude_code_oauth/register_callbacks.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/claude_code_oauth/test_fast_mode.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/claude_code_oauth/test_plugin.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/claude_code_oauth/token_refresh_heartbeat.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/claude_code_oauth/utils.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/context_indicator/__init__.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/context_indicator/register_callbacks.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/context_indicator/usage.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/copilot_auth/__init__.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/copilot_auth/config.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/copilot_auth/reasoning_client.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/copilot_auth/register_callbacks.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/copilot_auth/utils.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/customizable_commands/__init__.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/customizable_commands/register_callbacks.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/dbos_durable_exec/__init__.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/dbos_durable_exec/cancel.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/dbos_durable_exec/commands.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/dbos_durable_exec/config.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/dbos_durable_exec/lifecycle.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/dbos_durable_exec/register_callbacks.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/dbos_durable_exec/runtime.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/dbos_durable_exec/workflow_ids.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/dbos_durable_exec/wrapper.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/destructive_command_guard/__init__.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/destructive_command_guard/detector.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/destructive_command_guard/register_callbacks.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/emoji_filter/__init__.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/emoji_filter/config.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/emoji_filter/register_callbacks.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/emoji_filter/stripper.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/example_custom_command/README.md +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/example_custom_command/register_callbacks.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/file_permission_handler/__init__.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/file_permission_handler/register_callbacks.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/force_push_guard/__init__.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/force_push_guard/detector.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/force_push_guard/register_callbacks.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/force_push_guard/test_detector.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/frontend_emitter/__init__.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/frontend_emitter/emitter.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/frontend_emitter/register_callbacks.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/frontend_emitter/session_context.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/hook_creator/__init__.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/hook_creator/register_callbacks.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/hook_manager/__init__.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/hook_manager/config.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/hook_manager/hooks_menu.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/hook_manager/register_callbacks.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/oauth_puppy_html.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/obsidian_agent/README.md +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/obsidian_agent/__init__.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/obsidian_agent/agent_obsidian.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/obsidian_agent/register_callbacks.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/ollama/__init__.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/ollama/register_callbacks.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/ollama_setup/__init__.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/ollama_setup/completer.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/ollama_setup/register_callbacks.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/pop_command/__init__.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/pop_command/register_callbacks.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/prompt_newline/__init__.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/prompt_newline/config.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/prompt_newline/register_callbacks.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/prune/__init__.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/prune/prune_menu.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/prune/prune_model.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/prune/prune_render.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/prune/register_callbacks.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/puppy_kennel/README.md +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/puppy_kennel/__init__.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/puppy_kennel/commands.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/puppy_kennel/config.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/puppy_kennel/kennel.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/puppy_kennel/packer.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/puppy_kennel/recorder.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/puppy_kennel/register_callbacks.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/puppy_kennel/retriever.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/puppy_kennel/schema.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/puppy_kennel/state.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/puppy_kennel/tools.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/puppy_kennel/wings.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/review_pr/__init__.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/review_pr/register_callbacks.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/shell_safety/__init__.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/shell_safety/agent_shell_safety.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/shell_safety/command_cache.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/shell_safety/register_callbacks.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/statusline/__init__.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/statusline/config.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/statusline/payload.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/statusline/prompt_patch.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/statusline/register_callbacks.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/statusline/runner.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/statusline/statusline_command.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/switch_agent_resume/__init__.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/switch_agent_resume/register_callbacks.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/synthetic_status/__init__.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/synthetic_status/register_callbacks.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/synthetic_status/status_api.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/theme/README.md +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/theme/__init__.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/theme/bundled_palettes.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/theme/content_styles.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/theme/osc_palette.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/theme/picker.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/theme/register_callbacks.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/theme/rich_themes.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/theme/themes.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/token_ratio_learner/__init__.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/token_ratio_learner/ratios.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/token_ratio_learner/register_callbacks.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/universal_constructor/__init__.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/universal_constructor/models.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/universal_constructor/register_callbacks.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/universal_constructor/registry.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/universal_constructor/sandbox.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/wide_completion_menu/__init__.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/wide_completion_menu/register_callbacks.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/wiggum/__init__.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/wiggum/judge.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/wiggum/judge_config.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/wiggum/register_callbacks.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/plugins/wiggum/state.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/provider_credentials.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/provider_identity.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/pydantic_patches.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/reopenable_async_client.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/round_robin_model.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/session_storage.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/status_display.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/summarization_agent.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/terminal_utils.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/tools/__init__.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/tools/agent_tools.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/tools/ask_user_question/__init__.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/tools/ask_user_question/constants.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/tools/ask_user_question/demo_tui.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/tools/ask_user_question/handler.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/tools/ask_user_question/models.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/tools/ask_user_question/registration.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/tools/ask_user_question/renderers.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/tools/ask_user_question/terminal_ui.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/tools/ask_user_question/theme.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/tools/ask_user_question/tui_loop.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/tools/browser/__init__.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/tools/browser/browser_control.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/tools/browser/browser_interactions.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/tools/browser/browser_locators.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/tools/browser/browser_manager.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/tools/browser/browser_navigation.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/tools/browser/browser_screenshot.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/tools/browser/browser_scripts.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/tools/browser/browser_workflows.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/tools/command_runner.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/tools/common.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/tools/display.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/tools/file_modifications.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/tools/file_operations.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/tools/image_tools.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/tools/model_tools.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/tools/skills_tools.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/tools/subagent_context.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/tools/subagent_invocation.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/tools/tools_content.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/tools/universal_constructor.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/uvx_detection.py +0 -0
- {code_puppy-0.0.548 → code_puppy-0.0.549}/code_puppy/version_checker.py +0 -0
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
"""Single-key config writes with validation + side effects.
|
|
2
|
+
|
|
3
|
+
Used by both the ``/set`` slash command and the interactive ``/set``
|
|
4
|
+
menu so validation rules (e.g. ``cancel_agent_key`` allow-list) and
|
|
5
|
+
restart-required warnings stay in one place.
|
|
6
|
+
|
|
7
|
+
Lives in its own module to break the import cycle that would otherwise
|
|
8
|
+
form between ``config_commands`` and ``set_menu``.
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
from __future__ import annotations
|
|
12
|
+
|
|
13
|
+
from dataclasses import dataclass
|
|
14
|
+
from typing import Optional
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
@dataclass(frozen=True)
|
|
18
|
+
class ApplyResult:
|
|
19
|
+
"""Outcome of writing a single config key/value pair.
|
|
20
|
+
|
|
21
|
+
``warning`` carries validation/policy notices that should fire
|
|
22
|
+
regardless of whether the agent reload succeeds (e.g. restart-required
|
|
23
|
+
notices for ``enable_dbos`` and ``cancel_agent_key``).
|
|
24
|
+
``reload_error`` is the separate "the config saved fine but the live
|
|
25
|
+
agent couldn't be reloaded" signal -- keeping it on its own field
|
|
26
|
+
means a reload failure can't silently clobber a restart notice.
|
|
27
|
+
"""
|
|
28
|
+
|
|
29
|
+
ok: bool
|
|
30
|
+
value_after: Optional[str] = None
|
|
31
|
+
error: Optional[str] = None
|
|
32
|
+
warning: Optional[str] = None
|
|
33
|
+
reload_error: Optional[str] = None
|
|
34
|
+
requires_restart: bool = False
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def _restart_notice(label: str) -> str:
|
|
38
|
+
return f"{label} changed. Please restart Code Puppy for this change to take effect."
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def invalidate_post_write_caches(key: str) -> None:
|
|
42
|
+
"""Invalidate any in-memory caches whose source-of-truth just changed.
|
|
43
|
+
|
|
44
|
+
Some config getters cache resolved values per-process to avoid
|
|
45
|
+
re-reading puppy.cfg + validating registries on every call. After a
|
|
46
|
+
write (set OR reset) those caches need explicit invalidation, or
|
|
47
|
+
subsequent reads return the stale pre-write value until the process
|
|
48
|
+
restarts -- which is exactly how users discover this kind of bug.
|
|
49
|
+
|
|
50
|
+
Called from both the slash-set path (:func:`apply_setting`) and the
|
|
51
|
+
menu reset path so the two stay in lock-step.
|
|
52
|
+
|
|
53
|
+
Today only the ``model`` key has a cache that needs this treatment;
|
|
54
|
+
add new keys here as they grow caches.
|
|
55
|
+
"""
|
|
56
|
+
if key == "model":
|
|
57
|
+
from code_puppy.config import clear_model_cache, reset_session_model
|
|
58
|
+
|
|
59
|
+
reset_session_model()
|
|
60
|
+
clear_model_cache()
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def apply_setting(
|
|
64
|
+
key: str,
|
|
65
|
+
value: str,
|
|
66
|
+
*,
|
|
67
|
+
reload_agent: bool = True,
|
|
68
|
+
) -> ApplyResult:
|
|
69
|
+
"""Persist ``key`` -> ``value`` to ``puppy.cfg`` with validation.
|
|
70
|
+
|
|
71
|
+
Parameters
|
|
72
|
+
----------
|
|
73
|
+
key:
|
|
74
|
+
Config key to write.
|
|
75
|
+
value:
|
|
76
|
+
Value to persist. Stored as-is unless validation normalises it
|
|
77
|
+
(e.g. ``cancel_agent_key`` is lower-cased).
|
|
78
|
+
reload_agent:
|
|
79
|
+
When True (the default) the currently-active agent is reloaded
|
|
80
|
+
so the change takes effect immediately. The menu passes False
|
|
81
|
+
per-edit and triggers a single reload at picker exit to avoid
|
|
82
|
+
reload thrash when the user edits multiple settings.
|
|
83
|
+
"""
|
|
84
|
+
from code_puppy.config import set_config_value
|
|
85
|
+
|
|
86
|
+
if not key:
|
|
87
|
+
return ApplyResult(ok=False, error="You must supply a key.")
|
|
88
|
+
|
|
89
|
+
warning: Optional[str] = None
|
|
90
|
+
requires_restart = False
|
|
91
|
+
normalized_value = value
|
|
92
|
+
|
|
93
|
+
if key == "cancel_agent_key":
|
|
94
|
+
from code_puppy.keymap import VALID_CANCEL_KEYS
|
|
95
|
+
|
|
96
|
+
normalized_value = value.strip().lower()
|
|
97
|
+
if normalized_value not in VALID_CANCEL_KEYS:
|
|
98
|
+
return ApplyResult(
|
|
99
|
+
ok=False,
|
|
100
|
+
error=(
|
|
101
|
+
f"Invalid cancel_agent_key '{value}'. Valid options: "
|
|
102
|
+
f"{', '.join(sorted(VALID_CANCEL_KEYS))}"
|
|
103
|
+
),
|
|
104
|
+
)
|
|
105
|
+
warning = _restart_notice("cancel_agent_key")
|
|
106
|
+
requires_restart = True
|
|
107
|
+
elif key == "enable_dbos":
|
|
108
|
+
warning = _restart_notice("DBOS configuration")
|
|
109
|
+
requires_restart = True
|
|
110
|
+
|
|
111
|
+
set_config_value(key, normalized_value)
|
|
112
|
+
invalidate_post_write_caches(key)
|
|
113
|
+
|
|
114
|
+
reload_error: Optional[str] = None
|
|
115
|
+
if reload_agent:
|
|
116
|
+
from code_puppy.agents import get_current_agent
|
|
117
|
+
|
|
118
|
+
try:
|
|
119
|
+
get_current_agent().reload_code_generation_agent()
|
|
120
|
+
except Exception as exc:
|
|
121
|
+
reload_error = f"Config saved but agent reload failed: {exc}"
|
|
122
|
+
|
|
123
|
+
return ApplyResult(
|
|
124
|
+
ok=True,
|
|
125
|
+
value_after=normalized_value,
|
|
126
|
+
warning=warning,
|
|
127
|
+
reload_error=reload_error,
|
|
128
|
+
requires_restart=requires_restart,
|
|
129
|
+
)
|
|
@@ -5,9 +5,10 @@ discovered by the command registry system.
|
|
|
5
5
|
"""
|
|
6
6
|
|
|
7
7
|
import json
|
|
8
|
+
from typing import Optional
|
|
8
9
|
|
|
9
10
|
from code_puppy.command_line.command_registry import register_command
|
|
10
|
-
from code_puppy.
|
|
11
|
+
from code_puppy.command_line.config_apply import apply_setting
|
|
11
12
|
|
|
12
13
|
|
|
13
14
|
# Import get_commands_help from command_handler to avoid circular imports
|
|
@@ -171,21 +172,18 @@ def handle_verbosity_command(command: str) -> bool:
|
|
|
171
172
|
|
|
172
173
|
@register_command(
|
|
173
174
|
name="set",
|
|
174
|
-
description="Set puppy config (e.g., /set yolo_mode true)",
|
|
175
|
-
usage="/set
|
|
175
|
+
description="Set puppy config (e.g., /set yolo_mode true) or launch interactive menu",
|
|
176
|
+
usage="/set [key [value]]",
|
|
176
177
|
category="config",
|
|
177
178
|
)
|
|
178
179
|
def handle_set_command(command: str) -> bool:
|
|
179
|
-
"""Set configuration values."""
|
|
180
|
-
from rich.text import Text
|
|
181
|
-
|
|
182
|
-
from code_puppy.config import set_config_value
|
|
180
|
+
"""Set configuration values, or launch the interactive picker."""
|
|
183
181
|
from code_puppy.messaging import emit_error, emit_info, emit_success, emit_warning
|
|
184
182
|
|
|
185
183
|
tokens = command.split(None, 2)
|
|
186
184
|
argstr = command[len("/set") :].strip()
|
|
187
|
-
key = None
|
|
188
|
-
value = None
|
|
185
|
+
key: Optional[str] = None
|
|
186
|
+
value: Optional[str] = None
|
|
189
187
|
if "=" in argstr:
|
|
190
188
|
key, value = argstr.split("=", 1)
|
|
191
189
|
key = key.strip()
|
|
@@ -197,64 +195,83 @@ def handle_set_command(command: str) -> bool:
|
|
|
197
195
|
key = tokens[1]
|
|
198
196
|
value = ""
|
|
199
197
|
else:
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
config_keys.append("compaction_strategy")
|
|
203
|
-
session_help = (
|
|
204
|
-
"\n[yellow]Session Management[/yellow]"
|
|
205
|
-
"\n [cyan]auto_save_session[/cyan] Auto-save chat after every response (true/false)"
|
|
206
|
-
)
|
|
207
|
-
keymap_help = (
|
|
208
|
-
"\n[yellow]Keyboard Shortcuts[/yellow]"
|
|
209
|
-
"\n [cyan]cancel_agent_key[/cyan] Key to cancel agent tasks (ctrl+c, ctrl+k, or ctrl+q)"
|
|
210
|
-
)
|
|
211
|
-
emit_warning(
|
|
212
|
-
Text.from_markup(
|
|
213
|
-
f"Usage: /set KEY=VALUE or /set KEY VALUE\nConfig keys: {', '.join(config_keys)}\n[dim]Note: compaction_strategy can be 'summarization' or 'truncation'[/dim]{session_help}{keymap_help}"
|
|
214
|
-
)
|
|
215
|
-
)
|
|
198
|
+
# No arguments -- launch the interactive config menu
|
|
199
|
+
_launch_interactive_set_menu()
|
|
216
200
|
return True
|
|
217
|
-
if key:
|
|
218
|
-
# Check if we're toggling DBOS enablement
|
|
219
|
-
if key == "enable_dbos":
|
|
220
|
-
emit_info(
|
|
221
|
-
Text.from_markup(
|
|
222
|
-
"[yellow]⚠️ DBOS configuration changed. Please restart Code Puppy for this change to take effect.[/yellow]"
|
|
223
|
-
)
|
|
224
|
-
)
|
|
225
201
|
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
202
|
+
if not key:
|
|
203
|
+
emit_error("You must supply a key.")
|
|
204
|
+
return True
|
|
229
205
|
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
value = normalized_value # Use normalized value
|
|
237
|
-
emit_info(
|
|
238
|
-
Text.from_markup(
|
|
239
|
-
"[yellow]⚠️ cancel_agent_key changed. Please restart Code Puppy for this change to take effect.[/yellow]"
|
|
240
|
-
)
|
|
241
|
-
)
|
|
206
|
+
result = apply_setting(key, value or "", reload_agent=True)
|
|
207
|
+
if not result.ok:
|
|
208
|
+
emit_error(result.error or "Failed to apply setting.")
|
|
209
|
+
return True
|
|
210
|
+
|
|
211
|
+
from code_puppy.command_line.set_menu_values import is_sensitive_key, mask_value
|
|
242
212
|
|
|
243
|
-
|
|
244
|
-
|
|
213
|
+
display = (
|
|
214
|
+
mask_value(result.value_after or "")
|
|
215
|
+
if is_sensitive_key(key)
|
|
216
|
+
else result.value_after
|
|
217
|
+
)
|
|
218
|
+
emit_success(f'Set {key} = "{display}" in puppy.cfg!')
|
|
219
|
+
# Restart notices (warning) and the reload-success/failure signal
|
|
220
|
+
# are independent: a restart-required key like ``enable_dbos``
|
|
221
|
+
# should still report whether the live agent reload happened. The
|
|
222
|
+
# original ``/set`` always emitted "Agent reloaded with updated
|
|
223
|
+
# config" alongside the restart notice; preserve that contract.
|
|
224
|
+
if result.warning:
|
|
225
|
+
emit_warning(result.warning)
|
|
226
|
+
if result.reload_error:
|
|
227
|
+
emit_warning(result.reload_error)
|
|
228
|
+
else:
|
|
229
|
+
emit_info("Agent reloaded with updated config")
|
|
230
|
+
return True
|
|
231
|
+
|
|
232
|
+
|
|
233
|
+
def _launch_interactive_set_menu() -> None:
|
|
234
|
+
"""Run the picker in a worker thread and drain any queued messages.
|
|
235
|
+
|
|
236
|
+
The picker owns the terminal while prompt_toolkit is active, so it
|
|
237
|
+
can't safely emit messages itself; instead it returns them in
|
|
238
|
+
``PickerResult.pending_messages`` and we emit them here on the
|
|
239
|
+
main thread once the picker has fully exited.
|
|
240
|
+
"""
|
|
241
|
+
import asyncio
|
|
242
|
+
import concurrent.futures
|
|
243
|
+
|
|
244
|
+
from code_puppy.command_line.set_menu import interactive_set_picker
|
|
245
|
+
from code_puppy.messaging import emit_error, emit_info, emit_success, emit_warning
|
|
246
|
+
|
|
247
|
+
_LEVEL_EMITTERS = {
|
|
248
|
+
"info": emit_info,
|
|
249
|
+
"success": emit_success,
|
|
250
|
+
"warning": emit_warning,
|
|
251
|
+
"error": emit_error,
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
with concurrent.futures.ThreadPoolExecutor() as executor:
|
|
255
|
+
future = executor.submit(lambda: asyncio.run(interactive_set_picker()))
|
|
256
|
+
result = future.result(timeout=300) # 5 min timeout
|
|
257
|
+
|
|
258
|
+
if result is None:
|
|
259
|
+
return
|
|
260
|
+
for level, message in result.pending_messages:
|
|
261
|
+
emitter = _LEVEL_EMITTERS.get(level, emit_info)
|
|
262
|
+
emitter(message)
|
|
245
263
|
|
|
246
|
-
|
|
264
|
+
# Coalesce all agent reloads into a single one at the end, but only
|
|
265
|
+
# when the user actually changed something. Failures here mirror the
|
|
266
|
+
# behaviour of the per-key path: warn, don't crash.
|
|
267
|
+
if result.changed_settings:
|
|
247
268
|
from code_puppy.agents import get_current_agent
|
|
248
269
|
|
|
249
270
|
try:
|
|
250
|
-
|
|
251
|
-
current_agent.reload_code_generation_agent()
|
|
271
|
+
get_current_agent().reload_code_generation_agent()
|
|
252
272
|
emit_info("Agent reloaded with updated config")
|
|
253
273
|
except Exception as reload_error:
|
|
254
274
|
emit_warning(f"Config saved but agent reload failed: {reload_error}")
|
|
255
|
-
else:
|
|
256
|
-
emit_error("You must supply a key.")
|
|
257
|
-
return True
|
|
258
275
|
|
|
259
276
|
|
|
260
277
|
def _get_json_agents_pinned_to_model(model_name: str) -> list:
|