helpers/plugins.py.dox.md
plugins.py helper module.plugins.py because this directory is intentionally flat.plugins.py owns the runtime implementation.plugins.py.dox.md owns durable notes about responsibilities, contracts, side effects, and verification for that implementation.PluginAssetFile (TypedDict)PluginMetadata (BaseModel)PluginListItem (BaseModel)PluginUpdateInfo (BaseModel)register_watchdogs()after_plugin_change(plugin_names: list[str] | None=..., python_change: bool=...)refresh_plugin_modules(plugin_names: list[str] | None=...)clear_plugin_cache(plugin_names: list[str] | None=...)get_plugin_roots(plugin_name: str=...) -> List[str]: Plugin root directories, ordered by priority (user first).get_plugins_list()get_enhanced_plugins_list(custom: bool=..., builtin: bool=..., plugin_names: list[str] | None=...) -> List[PluginListItem]: Discover plugins by directory convention. First root wins on ID conflict.get_custom_plugins_updates(plugin_names: list[str] | None=...) -> List[PluginUpdateInfo]get_plugin_meta(plugin_name: str)find_plugin_dir(plugin_name: str)uninstall_plugin(plugin_name)delete_plugin(plugin_name: str)get_plugin_paths(*subpaths) -> List[str]get_enabled_plugin_paths(agent: Agent | None, *subpaths) -> List[str]get_enabled_plugins(agent: Agent | None)determined_toggle_from_paths(default: bool, paths: Iterator[str])get_toggle_state(plugin_name: str) -> ToggleStatetoggle_plugin(plugin_name: str, enabled: bool, project_name: str=..., agent_profile: str=..., clear_overrides: bool=...)get_plugin_config(plugin_name: str, agent: Agent | None=..., project_name: str | None=..., agent_profile: str | None=...)get_default_plugin_config(plugin_name: str)save_plugin_config(plugin_name: str, project_name: str, agent_profile: str, settings: dict)find_plugin_asset(plugin_name: str, *subpaths, project_name=..., agent_profile=...)find_plugin_assets(*subpaths, plugin_name: str=..., project_name: str=..., agent_profile: str=..., only_first: bool=...) -> list[PluginAssetFile]determine_plugin_asset_path(plugin_name: str, project_name: str, agent_profile: str, *subpaths)send_frontend_reload_notification(plugin_names: list[str] | None=...): If the plugin changed has webui extensions, notify frontend to reload the pagecall_plugin_hook(plugin_name: str, hook_name: str, default: Any=..., *args, **kwargs)_apply_defaults_from_env(plugin_name: str, config: dict[str, Any])_META_TARGET_RE, META_FILE_NAME, CONFIG_FILE_NAME, CONFIG_DEFAULT_FILE_NAME, DISABLED_FILE_NAME, ENABLED_FILE_NAME, TOGGLE_FILE_PATTERN, HOOKS_SCRIPT, HOOKS_CACHE_AREA, PLUGINS_LIST_CACHE_AREA, ENABLED_PLUGINS_LIST_CACHE_AREA, ENABLED_PLUGINS_PATHS_CACHE_AREA.__future__, asyncio, glob, helpers, helpers.defer, helpers.watchdog, json, pathlib, pydantic, re, regex, time, typing.re.compile, Field, watchdog.add_watchdog, clear_plugin_cache, send_frontend_reload_notification, DeferredTask.start_task, get_plugin_roots, result.sort, cache.add, get_enhanced_plugins_list, find_plugin_dir, files.get_abs_path, files.exists, call_plugin_hook, delete_plugin, files.delete_dir, after_plugin_change, get_enabled_plugins, get_plugins_list, get_plugin_meta.tests/test_a0_connector_computer_use_metadata.pytests/test_a0_connector_prompt_gating.pytests/test_browser_agent_regressions.pytests/test_chat_compaction.pytests/test_default_prompt_budget.pytests/test_document_query_plugin.pytests/test_error_retry_plugin.pytests/test_host_browser_connector.pyNo child DOX files.