code-puppy 0.0.550__tar.gz → 0.0.552__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.550 → code_puppy-0.0.552}/PKG-INFO +1 -1
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/agents/_builder.py +72 -3
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/callbacks.py +66 -3
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/config.py +31 -0
- code_puppy-0.0.552/code_puppy/plugins/__init__.py +475 -0
- code_puppy-0.0.552/code_puppy/plugins/config.py +65 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/example_custom_command/README.md +41 -0
- code_puppy-0.0.552/code_puppy/plugins/plugin_list/__init__.py +0 -0
- code_puppy-0.0.552/code_puppy/plugins/plugin_list/plugins_menu.py +313 -0
- code_puppy-0.0.552/code_puppy/plugins/plugin_list/register_callbacks.py +186 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/pyproject.toml +1 -1
- code_puppy-0.0.550/code_puppy/plugins/__init__.py +0 -186
- {code_puppy-0.0.550 → code_puppy-0.0.552}/.gitignore +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/LICENSE +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/README.md +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/__init__.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/__main__.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/agents/__init__.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/agents/_compaction.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/agents/_diagnostics.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/agents/_history.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/agents/_key_listeners.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/agents/_non_streaming_render.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/agents/_run_signals.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/agents/_runtime.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/agents/_steer_processor.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/agents/agent_code_puppy.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/agents/agent_creator_agent.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/agents/agent_helios.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/agents/agent_manager.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/agents/agent_planning.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/agents/agent_qa_kitten.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/agents/base_agent.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/agents/event_stream_handler.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/agents/json_agent.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/agents/run_stats.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/agents/smooth_stream.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/agents/subagent_stream_handler.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/chatgpt_codex_client.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/claude_cache_client.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/cli_runner.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/__init__.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/add_model_menu.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/agent_menu.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/attachments.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/autosave_menu.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/clipboard.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/colors_menu.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/command_handler.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/command_registry.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/config_apply.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/config_commands.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/core_commands.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/diff_menu.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/file_index.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/file_path_completion.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/judges_menu.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/load_context_completion.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/mcp/__init__.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/mcp/base.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/mcp/catalog_server_installer.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/mcp/custom_server_form.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/mcp/custom_server_installer.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/mcp/edit_command.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/mcp/handler.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/mcp/help_command.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/mcp/install_command.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/mcp/install_menu.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/mcp/list_command.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/mcp/logs_command.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/mcp/remove_command.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/mcp/restart_command.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/mcp/search_command.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/mcp/silence_warning_command.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/mcp/start_all_command.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/mcp/start_command.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/mcp/status_command.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/mcp/stop_all_command.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/mcp/stop_command.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/mcp/utils.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/mcp/wizard_utils.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/mcp_binding_menu.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/mcp_completion.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/model_picker_completion.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/model_settings_menu.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/onboarding_slides.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/onboarding_wizard.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/pagination.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/pin_command_completion.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/prompt_toolkit_completion.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/session_commands.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/set_menu.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/set_menu_catalog.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/set_menu_render.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/set_menu_schema.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/set_menu_settings.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/set_menu_shims.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/set_menu_values.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/shell_passthrough.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/skills_completion.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/uc_menu.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/utils.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/command_line/wiggum_state.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/error_logging.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/gemini_code_assist.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/gemini_model.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/hook_engine/README.md +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/hook_engine/__init__.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/hook_engine/aliases.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/hook_engine/engine.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/hook_engine/executor.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/hook_engine/matcher.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/hook_engine/models.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/hook_engine/registry.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/hook_engine/validator.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/http_utils.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/keymap.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/list_filtering.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/main.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/mcp_/__init__.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/mcp_/agent_bindings.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/mcp_/async_lifecycle.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/mcp_/blocking_startup.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/mcp_/captured_stdio_server.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/mcp_/circuit_breaker.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/mcp_/config_wizard.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/mcp_/dashboard.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/mcp_/error_isolation.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/mcp_/examples/retry_example.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/mcp_/health_monitor.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/mcp_/managed_server.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/mcp_/manager.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/mcp_/mcp_logs.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/mcp_/registry.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/mcp_/retry_manager.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/mcp_/server_registry_catalog.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/mcp_/status_tracker.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/mcp_/system_tools.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/mcp_prompts/__init__.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/mcp_prompts/hook_creator.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/messaging/__init__.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/messaging/bus.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/messaging/commands.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/messaging/markdown_patches.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/messaging/message_queue.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/messaging/messages.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/messaging/pause_controller.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/messaging/queue_console.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/messaging/renderers.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/messaging/rich_renderer.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/messaging/spinner/__init__.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/messaging/spinner/console_spinner.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/messaging/spinner/spinner_base.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/messaging/subagent_console.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/model_descriptions.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/model_factory.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/model_switching.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/model_utils.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/models.json +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/models_dev_api.json +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/models_dev_parser.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/agent_skills/__init__.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/agent_skills/config.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/agent_skills/discovery.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/agent_skills/downloader.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/agent_skills/enabled_skills.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/agent_skills/installer.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/agent_skills/metadata.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/agent_skills/prompt_builder.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/agent_skills/register_callbacks.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/agent_skills/remote_catalog.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/agent_skills/skill_catalog.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/agent_skills/skill_commands.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/agent_skills/skills_install_menu.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/agent_skills/skills_menu.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/agent_steering/README.md +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/agent_steering/__init__.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/agent_steering/register_callbacks.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/agent_steering/steering_prompt.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/aws_bedrock/__init__.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/aws_bedrock/config.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/aws_bedrock/register_callbacks.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/aws_bedrock/utils.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/azure_foundry/README.md +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/azure_foundry/__init__.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/azure_foundry/config.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/azure_foundry/discovery.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/azure_foundry/register_callbacks.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/azure_foundry/token.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/azure_foundry/utils.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/chatgpt_oauth/__init__.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/chatgpt_oauth/config.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/chatgpt_oauth/oauth_flow.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/chatgpt_oauth/register_callbacks.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/chatgpt_oauth/test_plugin.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/chatgpt_oauth/utils.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/claude_code_hooks/__init__.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/claude_code_hooks/config.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/claude_code_hooks/register_callbacks.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/claude_code_oauth/README.md +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/claude_code_oauth/SETUP.md +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/claude_code_oauth/__init__.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/claude_code_oauth/config.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/claude_code_oauth/fast_mode.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/claude_code_oauth/prompt_handler.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/claude_code_oauth/register_callbacks.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/claude_code_oauth/test_fast_mode.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/claude_code_oauth/test_plugin.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/claude_code_oauth/token_refresh_heartbeat.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/claude_code_oauth/utils.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/context_indicator/__init__.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/context_indicator/register_callbacks.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/context_indicator/usage.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/copilot_auth/__init__.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/copilot_auth/config.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/copilot_auth/reasoning_client.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/copilot_auth/register_callbacks.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/copilot_auth/utils.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/customizable_commands/__init__.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/customizable_commands/register_callbacks.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/dbos_durable_exec/__init__.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/dbos_durable_exec/cancel.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/dbos_durable_exec/commands.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/dbos_durable_exec/config.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/dbos_durable_exec/lifecycle.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/dbos_durable_exec/register_callbacks.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/dbos_durable_exec/runtime.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/dbos_durable_exec/workflow_ids.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/dbos_durable_exec/wrapper.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/destructive_command_guard/__init__.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/destructive_command_guard/detector.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/destructive_command_guard/register_callbacks.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/emoji_filter/__init__.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/emoji_filter/config.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/emoji_filter/register_callbacks.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/emoji_filter/stripper.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/example_custom_command/register_callbacks.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/file_permission_handler/__init__.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/file_permission_handler/register_callbacks.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/force_push_guard/__init__.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/force_push_guard/detector.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/force_push_guard/register_callbacks.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/force_push_guard/test_detector.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/frontend_emitter/__init__.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/frontend_emitter/emitter.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/frontend_emitter/register_callbacks.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/frontend_emitter/session_context.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/hook_creator/__init__.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/hook_creator/register_callbacks.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/hook_manager/__init__.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/hook_manager/config.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/hook_manager/hooks_menu.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/hook_manager/register_callbacks.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/oauth_puppy_html.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/obsidian_agent/README.md +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/obsidian_agent/__init__.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/obsidian_agent/agent_obsidian.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/obsidian_agent/register_callbacks.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/ollama/__init__.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/ollama/register_callbacks.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/ollama_setup/__init__.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/ollama_setup/completer.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/ollama_setup/register_callbacks.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/pop_command/__init__.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/pop_command/register_callbacks.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/prompt_newline/__init__.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/prompt_newline/config.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/prompt_newline/register_callbacks.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/prune/__init__.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/prune/prune_menu.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/prune/prune_model.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/prune/prune_render.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/prune/register_callbacks.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/puppy_kennel/README.md +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/puppy_kennel/__init__.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/puppy_kennel/commands.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/puppy_kennel/config.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/puppy_kennel/kennel.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/puppy_kennel/packer.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/puppy_kennel/recorder.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/puppy_kennel/register_callbacks.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/puppy_kennel/retriever.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/puppy_kennel/schema.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/puppy_kennel/state.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/puppy_kennel/tools.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/puppy_kennel/wings.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/review_pr/__init__.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/review_pr/register_callbacks.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/shell_safety/__init__.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/shell_safety/agent_shell_safety.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/shell_safety/command_cache.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/shell_safety/register_callbacks.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/statusline/__init__.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/statusline/config.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/statusline/payload.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/statusline/prompt_patch.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/statusline/register_callbacks.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/statusline/runner.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/statusline/statusline_command.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/switch_agent_resume/__init__.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/switch_agent_resume/register_callbacks.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/synthetic_status/__init__.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/synthetic_status/register_callbacks.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/synthetic_status/status_api.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/theme/README.md +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/theme/__init__.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/theme/bundled_palettes.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/theme/content_styles.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/theme/osc_palette.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/theme/picker.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/theme/register_callbacks.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/theme/rich_themes.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/theme/themes.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/token_ratio_learner/__init__.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/token_ratio_learner/ratios.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/token_ratio_learner/register_callbacks.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/universal_constructor/__init__.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/universal_constructor/models.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/universal_constructor/register_callbacks.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/universal_constructor/registry.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/universal_constructor/sandbox.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/wide_completion_menu/__init__.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/wide_completion_menu/register_callbacks.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/wiggum/__init__.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/wiggum/judge.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/wiggum/judge_config.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/wiggum/register_callbacks.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/plugins/wiggum/state.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/provider_credentials.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/provider_identity.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/pydantic_patches.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/reopenable_async_client.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/round_robin_model.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/session_storage.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/status_display.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/summarization_agent.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/terminal_utils.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/tools/__init__.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/tools/agent_tools.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/tools/ask_user_question/__init__.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/tools/ask_user_question/constants.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/tools/ask_user_question/demo_tui.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/tools/ask_user_question/handler.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/tools/ask_user_question/models.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/tools/ask_user_question/registration.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/tools/ask_user_question/renderers.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/tools/ask_user_question/terminal_ui.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/tools/ask_user_question/theme.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/tools/ask_user_question/tui_loop.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/tools/browser/__init__.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/tools/browser/browser_control.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/tools/browser/browser_interactions.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/tools/browser/browser_locators.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/tools/browser/browser_manager.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/tools/browser/browser_navigation.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/tools/browser/browser_screenshot.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/tools/browser/browser_scripts.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/tools/browser/browser_workflows.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/tools/command_runner.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/tools/common.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/tools/display.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/tools/file_modifications.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/tools/file_operations.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/tools/image_tools.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/tools/model_tools.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/tools/skills_tools.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/tools/subagent_context.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/tools/subagent_invocation.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/tools/tools_content.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/tools/universal_constructor.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/uvx_detection.py +0 -0
- {code_puppy-0.0.550 → code_puppy-0.0.552}/code_puppy/version_checker.py +0 -0
|
@@ -27,7 +27,9 @@ from code_puppy.callbacks import (
|
|
|
27
27
|
on_wrap_pydantic_agent,
|
|
28
28
|
)
|
|
29
29
|
from code_puppy.config import (
|
|
30
|
+
AGENTS_MD_MAX_CHARS_DEFAULT,
|
|
30
31
|
CONFIG_DIR,
|
|
32
|
+
get_agents_md_max_chars,
|
|
31
33
|
get_global_model_name,
|
|
32
34
|
get_value,
|
|
33
35
|
)
|
|
@@ -38,6 +40,54 @@ from code_puppy.model_factory import ModelFactory, make_model_settings
|
|
|
38
40
|
_AGENT_RULE_FILES = ("AGENTS.md", "AGENT.md", "agents.md", "agent.md")
|
|
39
41
|
_CODE_PUPPY_DIR = ".code_puppy"
|
|
40
42
|
|
|
43
|
+
# Re-export the default so callers that imported AGENTS_MD_MAX_CHARS from
|
|
44
|
+
# here keep working. The *effective* cap on any given load is whatever
|
|
45
|
+
# ``get_agents_md_max_chars()`` returns (user override via
|
|
46
|
+
# ``/set agents_md_max_chars=<int>``); this constant is just the fallback
|
|
47
|
+
# documented in the warning notice and used by tests that don't care about
|
|
48
|
+
# the override path.
|
|
49
|
+
AGENTS_MD_MAX_CHARS = AGENTS_MD_MAX_CHARS_DEFAULT
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
def _friendly_path(candidate: Path) -> str:
|
|
53
|
+
"""Render ``candidate`` as ``~/relative`` when it's under ``$HOME``.
|
|
54
|
+
|
|
55
|
+
Keeps the absolute home path out of the system prompt (and out of any
|
|
56
|
+
Slack paste of the agent's "please trim AGENTS.md" reply).
|
|
57
|
+
"""
|
|
58
|
+
try:
|
|
59
|
+
return f"~/{candidate.relative_to(Path.home())}"
|
|
60
|
+
except ValueError:
|
|
61
|
+
return str(candidate)
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
def _truncate_agents_md(content: str, source: str, max_chars: int) -> str:
|
|
65
|
+
"""Cap one AGENTS.md file at ``max_chars`` with a labelled notice.
|
|
66
|
+
|
|
67
|
+
Returns ``content`` unchanged when it's within the cap. When it overflows,
|
|
68
|
+
keeps exactly the first ``max_chars`` characters of the original and
|
|
69
|
+
appends a delimited warning addressed to the agent (so the agent can
|
|
70
|
+
surface it to the user on the next turn). ``source`` is a human-readable
|
|
71
|
+
label for the file — used in the warning so the agent can tell the user
|
|
72
|
+
which specific file to trim when multiple files overflow. ``max_chars``
|
|
73
|
+
is resolved once per load by the caller (see ``get_agents_md_max_chars``)
|
|
74
|
+
so a session-wide ``/set`` override is honoured.
|
|
75
|
+
"""
|
|
76
|
+
original_len = len(content)
|
|
77
|
+
if original_len <= max_chars:
|
|
78
|
+
return content
|
|
79
|
+
dropped = original_len - max_chars
|
|
80
|
+
notice = (
|
|
81
|
+
f"\n\n--- AGENTS.md truncated ---\n"
|
|
82
|
+
f"The {source} content was truncated: original was "
|
|
83
|
+
f"{original_len:,} chars, {dropped:,} chars dropped. Please tell "
|
|
84
|
+
f"the user to trim {source} below {max_chars:,} "
|
|
85
|
+
f"characters so the full rules can take effect (or raise the cap "
|
|
86
|
+
f"via `/set agents_md_max_chars=<int>`).\n"
|
|
87
|
+
f"--- end truncation notice ---"
|
|
88
|
+
)
|
|
89
|
+
return content[:max_chars] + notice
|
|
90
|
+
|
|
41
91
|
|
|
42
92
|
def load_puppy_rules() -> Optional[str]:
|
|
43
93
|
"""Load AGENT(S).md from global config dir and/or the current project dir.
|
|
@@ -50,13 +100,24 @@ def load_puppy_rules() -> Optional[str]:
|
|
|
50
100
|
1. ``.code_puppy/AGENTS.md`` (preferred — keeps root clean)
|
|
51
101
|
2. ``./AGENTS.md`` (alternate location)
|
|
52
102
|
|
|
103
|
+
Each file is independently truncated via :func:`_truncate_agents_md` so
|
|
104
|
+
the combined system-prompt overhead stays bounded. The per-file cap is
|
|
105
|
+
resolved once per call via :func:`get_agents_md_max_chars` so a user
|
|
106
|
+
can raise (or lower) it with ``/set agents_md_max_chars=<int>``.
|
|
107
|
+
|
|
53
108
|
Returns ``None`` if neither exists.
|
|
54
109
|
"""
|
|
110
|
+
max_chars = get_agents_md_max_chars()
|
|
111
|
+
|
|
55
112
|
global_rules: Optional[str] = None
|
|
56
113
|
for name in _AGENT_RULE_FILES:
|
|
57
114
|
candidate = Path(CONFIG_DIR) / name
|
|
58
115
|
if candidate.exists():
|
|
59
|
-
global_rules =
|
|
116
|
+
global_rules = _truncate_agents_md(
|
|
117
|
+
candidate.read_text(encoding="utf-8-sig"),
|
|
118
|
+
source=f"global {_friendly_path(candidate)}",
|
|
119
|
+
max_chars=max_chars,
|
|
120
|
+
)
|
|
60
121
|
break
|
|
61
122
|
|
|
62
123
|
project_rules: Optional[str] = None
|
|
@@ -67,7 +128,11 @@ def load_puppy_rules() -> Optional[str]:
|
|
|
67
128
|
for name in _AGENT_RULE_FILES:
|
|
68
129
|
candidate = code_puppy_dir / name
|
|
69
130
|
if candidate.exists():
|
|
70
|
-
project_rules =
|
|
131
|
+
project_rules = _truncate_agents_md(
|
|
132
|
+
candidate.read_text(encoding="utf-8-sig"),
|
|
133
|
+
source=f"project {candidate}",
|
|
134
|
+
max_chars=max_chars,
|
|
135
|
+
)
|
|
71
136
|
break
|
|
72
137
|
|
|
73
138
|
# Priority 2: Fallback to project root
|
|
@@ -75,7 +140,11 @@ def load_puppy_rules() -> Optional[str]:
|
|
|
75
140
|
for name in _AGENT_RULE_FILES:
|
|
76
141
|
candidate = Path(name)
|
|
77
142
|
if candidate.exists():
|
|
78
|
-
project_rules =
|
|
143
|
+
project_rules = _truncate_agents_md(
|
|
144
|
+
candidate.read_text(encoding="utf-8-sig"),
|
|
145
|
+
source=f"project {candidate}",
|
|
146
|
+
max_chars=max_chars,
|
|
147
|
+
)
|
|
79
148
|
break
|
|
80
149
|
|
|
81
150
|
rules = [r for r in (global_rules, project_rules) if r]
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import asyncio
|
|
2
2
|
import logging
|
|
3
3
|
import traceback
|
|
4
|
-
from typing import Any, Callable, Dict, List, Literal, Optional
|
|
4
|
+
from typing import Any, Callable, Dict, List, Literal, Optional, Set
|
|
5
5
|
|
|
6
6
|
PhaseType = Literal[
|
|
7
7
|
"startup",
|
|
@@ -112,6 +112,49 @@ _callbacks: Dict[PhaseType, List[CallbackFunc]] = {
|
|
|
112
112
|
|
|
113
113
|
logger = logging.getLogger(__name__)
|
|
114
114
|
|
|
115
|
+
# ---------------------------------------------------------------------------
|
|
116
|
+
# Plugin ownership tracking
|
|
117
|
+
# ---------------------------------------------------------------------------
|
|
118
|
+
# Maps each registered callback function to the plugin that registered it.
|
|
119
|
+
# Populated by register_callback() when a loading context is active.
|
|
120
|
+
_callback_owners: Dict[CallbackFunc, str] = {}
|
|
121
|
+
|
|
122
|
+
# Set by the plugin loader before importing each plugin's register_callbacks.py,
|
|
123
|
+
# cleared immediately after. register_callback() reads this to record ownership.
|
|
124
|
+
_current_loading_plugin: Optional[str] = None
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
def set_loading_context(plugin_name: str) -> None:
|
|
128
|
+
"""Mark *plugin_name* as the plugin currently being loaded.
|
|
129
|
+
|
|
130
|
+
Called by the plugin loader before importing a plugin's
|
|
131
|
+
``register_callbacks`` module. Any callbacks registered while this
|
|
132
|
+
context is active are associated with *plugin_name*.
|
|
133
|
+
"""
|
|
134
|
+
global _current_loading_plugin
|
|
135
|
+
_current_loading_plugin = plugin_name
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
def clear_loading_context() -> None:
|
|
139
|
+
"""Clear the current plugin loading context."""
|
|
140
|
+
global _current_loading_plugin
|
|
141
|
+
_current_loading_plugin = None
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
def get_callback_owner(func: CallbackFunc) -> Optional[str]:
|
|
145
|
+
"""Return the plugin name that registered *func*, or ``None``."""
|
|
146
|
+
return _callback_owners.get(func)
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
def _get_disabled_plugins() -> Set[str]:
|
|
150
|
+
"""Lazy accessor for the disabled-plugins set (avoids circular import)."""
|
|
151
|
+
try:
|
|
152
|
+
from code_puppy.plugins.config import get_disabled_plugins
|
|
153
|
+
|
|
154
|
+
return get_disabled_plugins()
|
|
155
|
+
except Exception:
|
|
156
|
+
return set()
|
|
157
|
+
|
|
115
158
|
|
|
116
159
|
def register_callback(phase: PhaseType, func: CallbackFunc) -> None:
|
|
117
160
|
if phase not in _callbacks:
|
|
@@ -131,6 +174,11 @@ def register_callback(phase: PhaseType, func: CallbackFunc) -> None:
|
|
|
131
174
|
return
|
|
132
175
|
|
|
133
176
|
_callbacks[phase].append(func)
|
|
177
|
+
|
|
178
|
+
# Record ownership if we know which plugin is loading.
|
|
179
|
+
if _current_loading_plugin is not None:
|
|
180
|
+
_callback_owners[func] = _current_loading_plugin
|
|
181
|
+
|
|
134
182
|
logger.debug(f"Registered async callback {func.__name__} for phase '{phase}'")
|
|
135
183
|
|
|
136
184
|
|
|
@@ -159,8 +207,23 @@ def clear_callbacks(phase: Optional[PhaseType] = None) -> None:
|
|
|
159
207
|
logger.debug(f"Cleared async callbacks for phase '{phase}'")
|
|
160
208
|
|
|
161
209
|
|
|
162
|
-
def get_callbacks(
|
|
163
|
-
|
|
210
|
+
def get_callbacks(
|
|
211
|
+
phase: PhaseType, *, include_disabled: bool = False
|
|
212
|
+
) -> List[CallbackFunc]:
|
|
213
|
+
"""Return callbacks for *phase*, filtering out disabled plugins.
|
|
214
|
+
|
|
215
|
+
When *include_disabled* is ``True`` the filter is bypassed — useful for
|
|
216
|
+
introspection (e.g. listing all registered callbacks).
|
|
217
|
+
"""
|
|
218
|
+
all_cbs = _callbacks.get(phase, []).copy()
|
|
219
|
+
if include_disabled:
|
|
220
|
+
return all_cbs
|
|
221
|
+
|
|
222
|
+
disabled = _get_disabled_plugins()
|
|
223
|
+
if not disabled:
|
|
224
|
+
return all_cbs
|
|
225
|
+
|
|
226
|
+
return [cb for cb in all_cbs if _callback_owners.get(cb) not in disabled]
|
|
164
227
|
|
|
165
228
|
|
|
166
229
|
def count_callbacks(phase: Optional[PhaseType] = None) -> int:
|
|
@@ -351,6 +351,8 @@ def get_config_keys():
|
|
|
351
351
|
default_keys.append(f"banner_color_{banner_name}")
|
|
352
352
|
# Add resume message count configuration
|
|
353
353
|
default_keys.append("resume_message_count")
|
|
354
|
+
# Per-file AGENTS.md character cap (see get_agents_md_max_chars()).
|
|
355
|
+
default_keys.append("agents_md_max_chars")
|
|
354
356
|
# Add /goal iteration cap (owned by the wiggum plugin, surfaced here so
|
|
355
357
|
# /set autocompletes it). See plugins/wiggum/register_callbacks.py.
|
|
356
358
|
default_keys.append("goal_max_iterations")
|
|
@@ -1300,6 +1302,35 @@ def get_resume_message_count() -> int:
|
|
|
1300
1302
|
return 50
|
|
1301
1303
|
|
|
1302
1304
|
|
|
1305
|
+
# Default cap (in characters) for any single AGENTS.md file injected into
|
|
1306
|
+
# the system prompt. Users can override this via
|
|
1307
|
+
# ``/set agents_md_max_chars=<int>`` — any positive integer is honoured so
|
|
1308
|
+
# models with very large context windows (1M+ tokens) can opt into bigger
|
|
1309
|
+
# AGENTS.md files when it makes sense. The default of 10,000 just keeps
|
|
1310
|
+
# the unbounded out-of-the-box behaviour from regressing.
|
|
1311
|
+
AGENTS_MD_MAX_CHARS_DEFAULT = 10_000
|
|
1312
|
+
|
|
1313
|
+
|
|
1314
|
+
def get_agents_md_max_chars() -> int:
|
|
1315
|
+
"""Return the per-file AGENTS.md character cap, honouring user override.
|
|
1316
|
+
|
|
1317
|
+
Read from the ``agents_md_max_chars`` config key (settable via
|
|
1318
|
+
``/set agents_md_max_chars=<int>``). Defaults to
|
|
1319
|
+
``AGENTS_MD_MAX_CHARS_DEFAULT`` (10,000) when unset, and falls back to
|
|
1320
|
+
the default on values that can't be a sensible cap (non-numeric,
|
|
1321
|
+
negative, zero). No upper clamp — if a user with a 1M-token model
|
|
1322
|
+
wants ``/set agents_md_max_chars=500000``, that's their call.
|
|
1323
|
+
"""
|
|
1324
|
+
val = get_value("agents_md_max_chars")
|
|
1325
|
+
try:
|
|
1326
|
+
configured = int(val) if val else AGENTS_MD_MAX_CHARS_DEFAULT
|
|
1327
|
+
except (ValueError, TypeError):
|
|
1328
|
+
return AGENTS_MD_MAX_CHARS_DEFAULT
|
|
1329
|
+
if configured <= 0:
|
|
1330
|
+
return AGENTS_MD_MAX_CHARS_DEFAULT
|
|
1331
|
+
return configured
|
|
1332
|
+
|
|
1333
|
+
|
|
1303
1334
|
def get_compaction_threshold():
|
|
1304
1335
|
"""
|
|
1305
1336
|
Returns the user-configured compaction threshold as a float between 0.0 and 1.0.
|