`, install by * slug, upload .zip, drag-drop a .zip onto the window). * * Public PHP surface (all filterable): * * - desktop_mode_plugins_window_user_can_register * - desktop_mode_plugins_window_user_can_use * - desktop_mode_plugins_window_args * - desktop_mode_plugins_window_template_html * - desktop_mode_plugins_window_browse_args * - desktop_mode_plugins_window_browse_response * - desktop_mode_plugins_window_info_response * - desktop_mode_plugins_window_review_parser * - desktop_mode_plugins_window_card_extras * * The dock-side swap (Plugins tile → native window when opt-in is on) * is implemented JS-side in `src/desktop.ts` via * `registerNativeUrlRemap` — this module owns only the window itself, * not the entry point. * * Plugin Check posture: NEVER `require_once ABSPATH . 'wp-admin/…'`. * Anything that needs admin-only classes (`Plugin_Upgrader`, * `WP_Filesystem`, `plugins_api`) lives on `admin-ajax.php` * (`includes/plugins-window/ajax.php`) where those files are already * loaded. Pure data enrichment lives on REST field decorators * (`includes/plugins-window/rest-fields.php`). * * @package WPDesktopMode * @since 0.9.0 */ defined( 'ABSPATH' ) || exit; require_once __DIR__ . '/permissions.php'; require_once __DIR__ . '/window.php'; require_once __DIR__ . '/rest-fields.php'; require_once __DIR__ . '/ajax.php';