| @@ -3,9 +3,9 @@ | ||
| 3 | 3 | Tags: admin, dashboard, desktop, productivity, ai |
| 4 | 4 | Requires at least: 6.0 |
| 5 | 5 | Tested up to: 7.1 |
| 6 | 6 | Requires PHP: 7.4 |
| 7 | -Stable tag: 1.1.4 | |
| 7 | +Stable tag: 1.1.11 | |
| 8 | 8 | License: GPLv2 or later |
| 9 | 9 | License URI: https://www.gnu.org/licenses/gpl-2.0.html |
| 10 | 10 | |
| 11 | 11 | A windowed workspace for wp-admin. Open posts, media, and settings side by side, with a dock, virtual desktops, and a Cmd+K palette. |
| @@ -67,9 +67,9 @@ | ||
| 67 | 67 | Extend OpenStation through documented PHP and JavaScript APIs. Register windows, icons, wallpapers, widgets, commands, and settings tabs through stable `openstation_register_*` PHP APIs and a typed JavaScript API; customize dock items through documented hooks; add AI tools with the WordPress Abilities API. Copy-paste examples live in the [developer docs on GitHub](https://github.com/WordPress/openstation/tree/trunk/docs). |
| 68 | 68 | |
| 69 | 69 | = External services = |
| 70 | 70 | |
| 71 | -No external service is required for OpenStation's desktop interface. The optional AI Assistant and two user-initiated enrichment features make the external requests described below. | |
| 71 | +No external service is required for OpenStation's desktop interface. The optional AI Assistant, two user-initiated enrichment features and an optional feedback form on deactivation make the external requests described below. | |
| 72 | 72 | |
| 73 | 73 | **AI Assistant** |
| 74 | 74 | |
| 75 | 75 | The optional AI Assistant sends data to the **AI provider you configure in WordPress's Settings → Connectors** (for example OpenAI, Anthropic, or Google). Generation is routed through WordPress 7.0's built-in AI Client, which supplies the credentials stored in Connectors. The plugin never handles an API key itself. With no provider configured in Connectors, no external AI requests are made. |
| @@ -76,9 +76,9 @@ | ||
| 76 | 76 | |
| 77 | 77 | When the AI Assistant is enabled and a user invokes it (via Cmd+K or the slash-command palette): |
| 78 | 78 | |
| 79 | 79 | * **What is sent:** the user's prompt, the conversation history for the active session, and tool-call metadata. The plugin's built-in tools (`search_posts`, `search_pages`, `search_comments`) run WordPress's native keyword search and may include excerpts of the matching posts/pages/comments in tool results, which are then sent back to the provider as part of the agentic loop. |
| 80 | -* **When it is sent:** on user-initiated AI requests, and (if an administrator enables "Score new comments with AI") on comment-save hooks for spam analysis. Posts, pages, and taxonomy terms are not sent automatically. | |
| 80 | +* **When it is sent:** on user-initiated AI requests only. Nothing is sent automatically — posts, pages, comments and taxonomy terms are never analyzed in the background. | |
| 81 | 81 | * **Why it is sent:** to obtain model completions and tool-call decisions that drive the AI Assistant. |
| 82 | 82 | * **Who provides the service:** whichever provider you configured in Settings → Connectors. Which provider (and endpoint) receives the data depends entirely on that configuration. Review the chosen provider's own terms and privacy policy (e.g. OpenAI, Anthropic, or Google). |
| 83 | 83 | |
| 84 | 84 | **URL shortcut favicons** |
| @@ -84,8 +84,17 @@ | ||
| 84 | 84 | **URL shortcut favicons** |
| 85 | 85 | |
| 86 | 86 | When an authorized user creates a desktop shortcut to an external URL, OpenStation asks that URL for its page HTML and favicon so the shortcut can display the site's icon. The request is made from your WordPress server and sends the requested URL, the server's IP address, an OpenStation user-agent string, and normal HTTP request metadata to the operator of that site. This happens only when a user creates the shortcut. The destination site's terms and privacy policy apply. |
| 87 | 87 | |
| 88 | +**Deactivation feedback** | |
| 89 | + | |
| 90 | +When an administrator deactivates OpenStation, a dialog asks one optional question about why. Nothing is sent unless you click **Send and deactivate**; **Skip and deactivate** sends nothing, and both deactivate the plugin. | |
| 91 | + | |
| 92 | +* **What is sent:** the reasons you ticked, the optional details you typed, the OpenStation, WordPress and PHP versions, your site language, whether the site is a network, how long OpenStation was installed, whether anyone on the site had turned it on (how many people, and how many days after install the first one did), whether the person deactivating had it on, the number of active plugins, and where the dialog was shown. Nothing that identifies you or your site: no URL, no site id, no email, no user name, no plugin names, and no IP address is stored. Each submission carries a random id used only to ignore an accidental retry. | |
| 93 | +* **When it is sent:** only when you click Send in the dialog shown on deactivation. There is no background ping. | |
| 94 | +* **Why it is sent:** to learn what did not work so it can be fixed. | |
| 95 | +* **Who provides the service:** the request goes from your server to [openstation.blog](https://openstation.blog/), the plugin's own site, operated by Automattic. Review the [Automattic Privacy Policy](https://automattic.com/privacy/). Site owners can turn the dialog off with the `openstation_deactivation_feedback_enabled` filter. | |
| 96 | + | |
| 88 | 97 | **WordPress.org plugin information** |
| 89 | 98 | |
| 90 | 99 | When an authorized user opens or refreshes parts of OpenStation's Plugins window, OpenStation may request public plugin details, update metadata, and review excerpts from WordPress.org. These requests send plugin slugs, the site's locale, and normal HTTP request metadata to WordPress.org. This information is used only to display and manage plugins. Review the [WordPress.org Privacy Policy](https://wordpress.org/about/privacy/). |
| 91 | 100 | |
| @@ -123,9 +132,9 @@ | ||
| 123 | 132 | Most plugin admin pages open as windows without special integration. Plugins that depend on running in the top-level browser context or use unusual navigation may need compatibility work. Plugins can also register their own native windows, widgets, and commands for a deeper integration. |
| 124 | 133 | |
| 125 | 134 | = Does the plugin require an external service to function? = |
| 126 | 135 | |
| 127 | -No. The desktop shell, windowing, dock, taskbar, virtual desktops, widgets, wallpapers, and extension APIs work without an external service. The optional AI Assistant requires a configured AI provider. OpenStation also makes limited, user-initiated requests to resolve URL-shortcut favicons and display WordPress.org plugin information. See "External services" in the description. | |
| 136 | +No. The desktop shell, windowing, dock, taskbar, virtual desktops, widgets, wallpapers, and extension APIs work without an external service. The optional AI Assistant requires a configured AI provider. OpenStation also makes limited, user-initiated requests to resolve URL-shortcut favicons and display WordPress.org plugin information, and offers an optional, one-click feedback form when you deactivate. See "External services" in the description. | |
| 128 | 137 | |
| 129 | 138 | = Does it patch WordPress core? = |
| 130 | 139 | |
| 131 | 140 | No. Every feature is wired through public WordPress actions and filters. |
| @@ -168,8 +177,150 @@ | ||
| 168 | 177 | * **[english-words](https://github.com/dwyl/english-words)** by dwyl (Unlicense) — used as a validity filter. |
| 169 | 178 | * **[LDNOOBW English list](https://github.com/LDNOOBW/List-of-Dirty-Naughty-Obscene-and-Otherwise-Bad-Words)** (CC-BY 4.0) — used as an exclusion filter. |
| 170 | 179 | |
| 171 | 180 | == Changelog == |
| 181 | + | |
| 182 | += 1.1.11 = | |
| 183 | +* Overview: Replace the dock tile icon with the brand widgets glyph | |
| 184 | +* Workspaces: Only offer a template when its plugin is active | |
| 185 | +* Admin bar: Remove the OpenStation actions, keep only the way in | |
| 186 | +* Workspaces: Rename Overview to Workspaces | |
| 187 | +* Agents: Keep the chat on the latest message across status repaints | |
| 188 | +* Workspaces: Land on the new blank desk before the wizard opens | |
| 189 | +* Workspaces: Rename a desk by double-clicking its name | |
| 190 | +* Chromeless: Fit the boot SPA screens edge to edge again | |
| 191 | +* WP Explorer: Show revision titles as text, not an avatar tag | |
| 192 | +* Fix: Let Jetpack route its own Stats and Blaze links | |
| 193 | +* User Edit: Add a View activity footprint button to the profile sidebar | |
| 194 | +* Fix: Jetpack Stats v2 not loading properly | |
| 195 | +* Drafts widget: Say why suggestions failed instead of "Could not get suggestions." | |
| 196 | +* Desktop: Make the desk readable on light wallpapers | |
| 197 | +* Session: Restore window titles in the current admin language | |
| 198 | +* Fix mixed-field forms for OpenStation Studio apps | |
| 199 | +* Recycle Bin: Fix 404 error on requests | |
| 200 | +* Prevent bottom dock scroll item clipping | |
| 201 | +* Os-button: forward a host aria-label onto the inner button so an icon-only button has a name | |
| 202 | +* Make corner close button visible on touch devices. | |
| 203 | +* Workspaces: Let the wizard's step trail jump to any step | |
| 204 | +* App runtime: open_url honours native-window URL remaps before opening an iframe | |
| 205 | +* Os-table: a slot-shaped cell value renders a named slot the light DOM fills | |
| 206 | +* Resolve toggle visibility and spacing on tablet screens. | |
| 207 | +* Notes: Say why converting a note to a post failed and keep the draft reachable | |
| 208 | +* Say why a request failed, everywhere: shared REST error, failure mapper, toast tone | |
| 209 | +* Workspaces: Repaint the desk you land on after deleting a workspace | |
| 210 | +* Menus: Open a window per pick, and make a window's tabs its menu | |
| 211 | +* Agents: store an answerless run as an error row so it is never replayed as the agent's turn | |
| 212 | +* Performance: Serialize each script dependency's payload once, not once per entry | |
| 213 | +* Developers: Let plugins track the desktop's network requests | |
| 214 | +* Kit: <os-facts> + <os-fact>, and the three apps that hand-rolled it | |
| 215 | + | |
| 216 | += 1.1.10 = | |
| 217 | +* Fix: drop a plugin zip into Core's upload box, not the Media Library dialog | |
| 218 | +* Multisite: Open sites without OpenStation in a browser tab | |
| 219 | +* Preferences: Open from the network admin shell | |
| 220 | +* Network app: Open from a desktop icon instead of a dock tile | |
| 221 | +* Highlight the best matching control in Preferences search | |
| 222 | +* Fix: External apps work on activation without needing to refresh | |
| 223 | +* Multisite: Drop Site Spaces from the Network Admin tile comments | |
| 224 | +* Multisite: Route My Sites and network Sites links out of the window | |
| 225 | +* Remove AI comment scoring from the shell | |
| 226 | +* Add responsive grid, app frame, and resizable split layouts | |
| 227 | +* Default theme: toning down accent | |
| 228 | +* Separate hidden columns for posts and pages | |
| 229 | +* Fix: keep metabox screens two-column down to 796px | |
| 230 | +* Overview: Merge the two edit controls on desktop tiles | |
| 231 | +* Plugins: Add AllTerrain MAIA to the Featured tab | |
| 232 | +* Ask one optional question when OpenStation is deactivated | |
| 233 | +* Plugins: Add a Plugin File Editor tab to the native Plugins window | |
| 234 | + | |
| 235 | += 1.1.9 = | |
| 236 | +* Add saved Plugins table view and fix preserved table rendering | |
| 237 | +* OS Settings: let a registered settings tab name its sidebar glyph | |
| 238 | +* Fix timeout stalled plugin updates | |
| 239 | +* Fix dock overlap on maximized and snapped windows | |
| 240 | +* Posts: paint plugin columns on the writing-desk cards | |
| 241 | +* My WordPress: gate the user dossier aggregates on the viewer | |
| 242 | +* Add window-scoped MIO assistance and private Settings actions | |
| 243 | + | |
| 244 | += 1.1.8 = | |
| 245 | +* Files: add uploaded files to the Media Library, and start a post or page from an image | |
| 246 | +* Add minimize and restore dock animations. | |
| 247 | +* Fix native app windows restoring the wrong saved instance | |
| 248 | +* Fix Native Users tables action icons visibility | |
| 249 | +* Add optimistic Trash updates and Explorer previews | |
| 250 | +* Redesign native Plugins, Posts, Pages, and Users workspaces | |
| 251 | +* Multisite: an OpenStation network of separate installs, with one switcher on every one | |
| 252 | +* Add the data-model page and unbreak the wiki sync | |
| 253 | +* Network: log in on arrival, mark external sites, and keep the switcher live | |
| 254 | +* Harden stored-file cleanup and make presence updates atomic | |
| 255 | +* Network: opt-in through an extended option, off by default | |
| 256 | +* Fix agent request timeouts and stale Recycle Bin contents | |
| 257 | +* Make preloading and shared cache opt-out Extended options | |
| 258 | +* Post Stats: draw the chart chrome in tokens instead of hardcoded black | |
| 259 | +* Preserve preferences on theme switch | |
| 260 | +* Os-text-field: add hide-label so a compact field can have a name without a visible label | |
| 261 | +* Widgets: raise the frame's chrome buttons to the 24px target-size floor | |
| 262 | +* AI Copilot: keep password-protected posts out of the search abilities | |
| 263 | +* Agents: seal password-protected posts in the get-post ability | |
| 264 | +* AI Copilot: gate comment search on parent-post readability | |
| 265 | +* My WordPress: scope the term-stats endpoint to posts the caller may read | |
| 266 | +* AI Copilot: authorize the model-named entity id before building the entity card | |
| 267 | +* My WordPress: gate the comment dossier on the window capability and parent-post readability | |
| 268 | + | |
| 269 | += 1.1.7 = | |
| 270 | +* Files: paint a dropped folder's tile as soon as it exists | |
| 271 | +* Shell: keep third-party scripts out of os-* fields and fixed panels out of the dynamic bar | |
| 272 | +* Files: drop the marching-ants frame from the wallpaper drop highlight | |
| 273 | +* WP Explorer: hover card off, preview pane only when open; Note Pad: drop the Public checkbox and Pin button | |
| 274 | +* Admin bar: keep items the bar's height; shell starts below the bar's measured edge | |
| 275 | + | |
| 276 | += 1.1.6 = | |
| 277 | +* Fix: Script loading: read the concat blob's handle list, so a lazily-loaded package stops replacing wp.hooks | |
| 278 | +* Fix: Shell boot: a target is one-shot and must be a real page, so a reload stops opening an empty window | |
| 279 | +* Add close all windows keybinds. | |
| 280 | +* Multisite: support the network admin, and scope desktops per site | |
| 281 | +* App Framework — a window in one PHP file (.osx.php + optional .os.ts), Code Blue & WP Explorer rebuilt on it | |
| 282 | +* App Framework DX: warn on the silent footguns, trace dispatches, open client views to third parties | |
| 283 | +* Trash: the Recycle Bin rebuilt on the App Framework — 659 lines against 1,869, the frozen id claimed, the legacy window deleted whole | |
| 284 | +* Station Home: the native Dashboard rebuilt on the App Framework — 931 lines against 1,323, no client script, the legacy window deleted whole | |
| 285 | +* WP Explorer: a list view — ids, slugs, dates and counts in sortable columns, remembered per user | |
| 286 | +* OpenStation Preferences: the settings window rebuilt on the App Framework — 4,858 lines against 7,136, the panel bundle deleted whole | |
| 287 | +* WooCommerce orders open on new window | |
| 288 | +* Multisite: drop deleted sites' tables, Core parity for site admins, per-site PWA, and a multisite CI job | |
| 289 | +* [Proposal] Workspaces — desktops that know what they're for | |
| 290 | +* Fix portal redirect: leave sub-resource fetches alone, so Jetpack's admin-bar sparkline renders | |
| 291 | +* Multisite: Site Spaces — another admin opens on its own desktop | |
| 292 | +* App Framework: find an app's client bundle without its TypeScript source, so packaged installs open client-view apps | |
| 293 | +* Code Blue: read the error without resizing, and a read-only skill that investigates it | |
| 294 | +* Drafts: name a draft's window after the draft, not the whole row | |
| 295 | +* Mobile: the phone layer — wp.os.mode, full-screen apps, switcher, tab bar | |
| 296 | +* Mobile: one desk on a phone — fold every desktop, switch workspaces off | |
| 297 | +* Mobile: fit the installed app to a phone — display stamp, no zoom, anchored tab bar | |
| 298 | +* Mobile: the native apps on a phone — one tap, one pane, pinch, and a self-updating PWA | |
| 299 | +* PWA: the shell never reloads itself — a waiting worker, a build stamp, and a Reload the user takes | |
| 300 | +* Chromeless: fix in-page title actions a plugin has grouped | |
| 301 | +* Drafts: fix the row's interaction states and name its actions | |
| 302 | +* App icons: full-bleed tiles, three purposes, and an apple-touch-icon | |
| 303 | +* Mobile: the list windows as cards, a bin that looks full, Explorer's item as a page | |
| 304 | +* Apps: Posts, Pages, Users, User Edit, Plugins and Comments become App Framework apps | |
| 305 | +* Mio: the inner line the artwork always had | |
| 306 | +* Preserve rapid extended options saves | |
| 307 | +* Multisite: every site is its own OpenStation, with a site switcher in overview | |
| 308 | + | |
| 309 | += 1.1.5 = | |
| 310 | +* Add OpenStation Beta: install builds from PR branches, trunk, or stable | |
| 311 | +* Pin every action to a commit SHA, prune closed PRs' zips from ci-artifacts | |
| 312 | +* Shell screen: boot the desktop from its own admin page instead of riding on the Dashboard | |
| 313 | +* Register --wp-admin-theme-color so chromeless documents never compute it to transparent | |
| 314 | +* Sync active Post/Page tab when navigating to Add Post from the Dock | |
| 315 | +* Attribute columns save to active window id | |
| 316 | +* Hotfix: a dock flyout holds a rail out, it never summons a parked one | |
| 317 | +* Revisions: open the revision browser in its own window | |
| 318 | +* Two low-contrast fixes in native windows: the shell document leaves quirks mode, and a neutral crumb stops pinning its paint inline | |
| 319 | +* Window channels: one set of books, so a window can leave its loading overlay | |
| 320 | +* Command palette: a harvested command that throws says so, instead of nothing at all | |
| 321 | +* Widgets: declare the card's token contract, so a widget's muted text stops landing at 3.81:1 | |
| 322 | +* In-window navigation: ask before painting, so a cancelled "Leave site?" stops stranding the window | |
| 172 | 323 | |
| 173 | 324 | = 1.1.4 = |
| 174 | 325 | * Tooling: a deterministic boot-cost measurement for the shell document |
| 175 | 326 | * Native-window script data ships once per handle, not once per window (boot document −8.9%) |