PluginProbe
OpenStation: Desktop Windows, Dock & Virtual Desktops for WP Admin / 1.1.13
OpenStation: Desktop Windows, Dock & Virtual Desktops for WP Admin v1.1.13
1.1.13 1.1.12 1.1.11 1.1.10 1.1.9 1.1.8 1.1.7 1.1.6 1.1.5 1.1.4 1.1.3 1.1.2 1.1.1 1.1.0 1.0.1 1.0.0 0.9.8 0.9.7 0.9.6 0.9.4 0.9.5 0.9.3 0.9.2 0.9.1 0.9.0 All 37 releases
← All changes | includes/render/assets.php +40 -27 1.1.7 → 1.1.13 View file →
@@ -87,10 +87,10 @@
87 87 wp_enqueue_style( 'openstation' );
88 88 wp_enqueue_style( 'os-windows' );
89 89 wp_enqueue_style( 'os-window-overview' );
90 90 wp_enqueue_style( 'os-dock' );
91 + wp_enqueue_style( 'os-dock-taskbar' );
91 92 wp_enqueue_style( 'os-dock-peek' );
92 - wp_enqueue_style( 'os-notch' );
93 93 wp_enqueue_style( 'os-workspaces' );
94 94 wp_enqueue_style( 'os-shortcuts' );
95 95 wp_enqueue_style( 'os-openstation-layout' );
96 96 wp_enqueue_style( 'os-files' );
@@ -346,8 +346,16 @@
346 346 : array();
347 347 $server_file_openers = function_exists( 'openstation_build_file_openers_payload' )
348 348 ? openstation_build_file_openers_payload()
349 349 : array();
350 + // Entries in the menu payload carry dependency handles; their
351 + // payloads ride once in `scriptDepPayloads` (GH#892). The file
352 + // lists stay whole: no sync module reads them on the client, and
353 + // compacting them here was the only write to the map after the
354 + // menu payload froze its own, so a refresh could not match it.
355 + $script_dep_payloads = isset( $menu_payload['scriptDepPayloads'] )
356 + ? (array) $menu_payload['scriptDepPayloads']
357 + : array();
350 358 $user_file_associations = function_exists( 'openstation_get_user_file_associations' )
351 359 ? openstation_get_user_file_associations( get_current_user_id() )
352 360 : array();
353 361 $server_wallpaper_menu_items = function_exists( 'openstation_build_wallpaper_menu_items' )
@@ -502,9 +510,14 @@
502 510 * @type bool $fromPortal Whether the shell was reached via the portal.
503 511 * @type bool $fromPortalIntent Whether the portal redirect resolved from an explicit `?target=…` (user navigation intent) rather than the session's focused window or the default-window fallback. Distinguishes a bare `/openstation/` visit from a portal-redirected admin-bar click so the shell can honour the URL the user actually asked for.
504 512 * @type array $seenIntros Slugs of one-time announcements the user has dismissed (e.g. `['openstation-rebrand']`).
505 513 * @type string $seenIntrosUrl REST endpoint for the seen-intros surface — POST `/seen` to mark, DELETE the base to reset.
514 + * @type bool $shellTour Whether this site offers the first-boot shell tour (`openstation_show_shell_tour`). Whether this user already had it is `seenIntros` containing `shell-tour`.
515 + * @type string $shellTourBundleUrl URL of the lazy shell-tour bundle, injected on first use.
516 + * @type array $firstRun `{ installedAt, firstEnabledAt, enabledAt }`, epoch seconds, 0 when unknown — the first-run stamps, read-only.
506 517 * @type bool $rebrandNotice Whether to offer this user the one-off announcement explaining the rename from Desktop Mode to OpenStation. True only when migration 5 flagged this user as a Desktop Mode user from before the rename AND they haven't dismissed the `openstation-rebrand` intro. Only ever present in the shell config, so the announcement never reaches the classic admin.
518 + * @type array|null $usageFeedback What the one-time usage feedback prompt needs (`restUrl`), or `null` when this user is not owed it: the feature is off, they have had OpenStation on for fewer than seven days by the `openstation_enabled_at` stamp, or they already answered or dismissed the `usage-feedback` intro. Carries no user data.
519 + * @type string $usageFeedbackBundleUrl URL of the lazy `usage-feedback` bundle, the form the prompt opens.
507 520 * }
508 521 */
509 522 $config = apply_filters(
510 523 'openstation_shell_config',
@@ -561,8 +574,11 @@
561 574 'serverDesktopThemes' => $server_desktop_themes,
562 575 'desktopIcons' => $desktop_icons,
563 576 'serverFileTypes' => $server_file_types,
564 577 'serverFileOpeners' => $server_file_openers,
578 + // Handle => dependency payload for every `scriptDeps` list in
579 + // this config; see `openstation_compact_script_deps()`.
580 + 'scriptDepPayloads' => (object) $script_dep_payloads,
565 581 'userFileAssociations' => $user_file_associations,
566 582 'filesUrl' => esc_url_raw( rest_url( 'desktop-mode/v1/files' ) ),
567 583 // Pinned-notes REST base (`includes/notes/rest.php`). The
568 584 // notes layer boots only when this is present.
@@ -706,8 +722,26 @@
706 722 // announcement yet. Same value that gated `os-announce`
707 723 // above; the dialog cannot paint without that stylesheet, so
708 724 // the two must not diverge.
709 725 'rebrandNotice' => $show_rebrand_notice,
726 + // The first-boot shell tour: whether this site offers it
727 + // (the `openstation_show_shell_tour` filter), and the lazy
728 + // bundle that runs it. Whether THIS user already had it is
729 + // `seenIntros` containing `shell-tour`; the shell reads that
730 + // itself so a reset can replay the tour without a new boot.
731 + 'shellTour' => openstation_should_offer_shell_tour( get_current_user_id() ),
732 + 'shellTourBundleUrl' => $lazy_bundle_url( 'shell-tour' ),
733 + // The first-run stamps, read-only, epoch seconds (0 when
734 + // unknown): when the plugin was installed, when anyone first
735 + // enabled it, and when this user did. See
736 + // `includes/first-run/stamps.php`.
737 + 'firstRun' => openstation_first_run_config( get_current_user_id() ),
738 + // Null for everyone but a user who has had OpenStation on
739 + // long enough and has not answered yet; the gate lives in
740 + // `includes/feedback/usage.php`. The form is a lazy bundle
741 + // fetched only when the user says yes to the prompt.
742 + 'usageFeedback' => function_exists( 'openstation_usage_feedback_config' ) ? openstation_usage_feedback_config() : null,
743 + 'usageFeedbackBundleUrl' => $lazy_bundle_url( 'usage-feedback' ),
710 744 'aiSearchUrl' => esc_url_raw( rest_url( 'desktop-mode/v1/ai/search' ) ),
711 745 // AI assistant availability + per-user toggle. Drives whether the
712 746 // Cmd+K palette and admin-bar icon appear, and the setup placeholder.
713 747 'aiAssistant' => function_exists( 'openstation_ai_assistant_config' )
@@ -716,39 +750,16 @@
716 750 // Lets the Features tab re-check provider availability without a
717 751 // reload after a connector is configured in Settings → Connectors.
718 752 'aiStatusUrl' => esc_url_raw( rest_url( 'desktop-mode/v1/ai/status' ) ),
719 753 'extendedOptions' => current_user_can( 'manage_options' ) ? openstation_get_extended_options() : null,
754 + // Agents offered as "Send to <agent>" on desktop and folder
755 + // tiles. See `src/desktop-files/agent-menu-items.ts`.
756 + 'agentsSendTo' => function_exists( 'openstation_agents_send_to_targets' ) ? openstation_agents_send_to_targets() : array(),
720 757 'extendedOptionsUrl' => esc_url_raw( rest_url( 'desktop-mode/v1/extended-options' ) ),
721 758 // Site-wide games kill switch (Extended options). Exposed to
722 759 // every user — the shell skips the challenges Heartbeat
723 760 // channel when the framework is off.
724 761 'gamesEnabled' => openstation_games_enabled(),
725 - // Comments-window AI moderation toggle — surfaced at the
726 - // shell level so the OS Settings → Features tab can render
727 - // the toggle without depending on the Comments window
728 - // being registered for this user. URL is the same
729 - // endpoint the comments-window config exposes; state is
730 - // `null` for non-admins (the UI hides the row entirely).
731 - 'commentsAiUrl' => esc_url_raw( rest_url( 'desktop-mode/v1/comments/ai-settings' ) ),
732 - // Non-null only for admins on a site where the Core AI stack is
733 - // present. Comment scoring routes through the AI Client (WP 7.0+),
734 - // so on older WordPress the whole row is hidden — same as the
735 - // assistant toggle — rather than shown disabled pointing at a
736 - // Settings → Connectors screen that doesn't exist there.
737 - 'commentsAi' => (
738 - current_user_can( 'manage_options' )
739 - && function_exists( 'openstation_ai_is_available' )
740 - && openstation_ai_is_available()
741 - )
742 - ? array(
743 - 'enabled' => function_exists( 'openstation_comments_ai_is_enabled' )
744 - ? openstation_comments_ai_is_enabled()
745 - : false,
746 - 'providerConfigured' => function_exists( 'openstation_comments_ai_provider_configured' )
747 - ? openstation_comments_ai_provider_configured()
748 - : false,
749 - )
750 - : null,
751 762 'currentUserIsAdmin' => current_user_can( 'manage_options' ),
752 763 // Null on single-site installs; its `networkAdmin` null
753 764 // without `manage_network`, which is what keeps the dock
754 765 // tile from registering.
@@ -758,8 +769,10 @@
758 769 'fromPortalIntent' => $from_portal_intent,
759 770 // One-shot like the boot target: a switch from another
760 771 // site's overview lands in this one's.
761 772 'landInOverview' => openstation_shell_lands_in_overview(),
773 + 'arrivalDirection' => openstation_shell_arrival_direction(),
774 + 'hopLinkOffer' => function_exists( 'openstation_network_link_offer' ) ? openstation_network_link_offer() : null,
762 775 'pwa' => array(
763 776 'manifestUrl' => esc_url_raw( openstation_pwa_manifest_url() ),
764 777 'swUrl' => esc_url_raw( openstation_pwa_sw_url() ),
765 778 // Extensionless retry target for hosts whose nginx 404s