-
Notifications
You must be signed in to change notification settings - Fork 41
migration code blue app
Code Blue, the error-log reader, is now an .os.php app (apps/code-blue/) driven by the App Framework instead of a PHP module plus a TypeScript bundle. The window is the same — same id (openstation-code-blue), same desktop icon, same features, same gate — so saved sessions, icon positions and the Developer-mode toggle carry over untouched. What changed is the surface underneath it.
| Surface | Replacement |
|---|---|
REST routes GET /desktop-mode/v1/code-blue/sources, GET / DELETE /desktop-mode/v1/code-blue/entries
|
There are no Code Blue routes. Every interaction is a dispatch: POST /desktop-mode/v1/apps/openstation-code-blue/dispatch with { action, state, args }. To read the window's data from code, call openstation_app_render( 'openstation-code-blue', array( 'range' => 'all' ) ) — it returns the manifest, the state and the rendered body. |
Filter openstation_code_blue_window_args
|
openstation_app_manifest — $manifest['width'], ['icon'], ['title_bar_buttons'], … for $id === 'openstation-code-blue'. |
Filter openstation_code_blue_icon_args
|
The same manifest filter: $manifest['desktop_icon'] (position, pinned). |
Filter openstation_code_blue_template_html
|
openstation_app_response — post-process $response['html'] on every render. |
PHP functions openstation_code_blue_parse(), _make_entry(), _log_sources(), _tail(), _read_source(), _user_can_use(), … |
Namespaced equivalents in OpenStation\Apps\CodeBlue: parse(), make_entry(), sources( $os ), tail(), read( $os, $source ), can_use( $os ). They are loaded with the app on init @10. |
Script handle openstation-code-blue, bundle assets/js/code-blue[.min].js, window.openStationNativeWindows['openstation-code-blue'] published by that bundle |
The shared openstation-app-runtime bundle publishes the render callback. Nothing to enqueue. |
Style handle openstation-code-blue → assets/css/code-blue.css
|
openstation-app-openstation-code-blue → apps/code-blue/code-blue.css, still a first-open companion. |
-
openstation_code_blue_user_can_use,openstation_code_blue_log_sources,openstation_code_blue_entries,openstation_code_blue_environment,openstation_code_blue_max_bytes,openstation_code_blue_max_entries(filters) andopenstation_code_blue_log_cleared(action) keep their names and signatures. Theenvironmentrows lost theirkeyfield;label,value,onremain. - The Developer-mode +
manage_options(manage_network_optionson multisite) gate. - The window id, size, desktop icon, and everything the user sees.
Code Blue was 3,235 lines — 981 PHP, 1,726 TypeScript, 528 CSS — for one window, most of it REST plumbing, registration and imperative DOM painting. As an app it is under half that: the .os.php declares the window and reads the log, the .os.ts paints the body and re-slices it instantly (range, search, sort, legend, expand never leave the browser), and it doubles as the proof that the framework can carry a real window: charts (<os-histogram>), a filterable list, a title-bar button, a ⋯-menu row, a confirm dialog, auto-refresh. See The client view.
This wiki is generated from the docs/ directory — edits made here are overwritten by the next sync.
To change a page, open a pull request against docs/.
Guides
- Development guide
- Releasing openstation
- Agents security model
- API Index
- The App Framework — a window in one PHP file
- Architecture
- Bridge protocol — wiring overview
- <os-*> component reference
- Data model — where OpenStation keeps its data
- Native Desktop Host — Experimental
- Desktop themes
- Dock customization — two registries, one mental model
- The event-driven framework
- Files on the Desktop
- Folder sharing
- Getting Started
- Hooks Reference
- Icons
- JavaScript Reference
- The Living Tree — algorithm definition
- Window-scoped MIO
- Mio
- Mobile — the phone layer
- Multisite
- Native Windows & Framework Interop
- OpenStation Network
- Plugin compatibility layer
- Progressive Web App (PWA)
- Station Home
- Using openstation from your own plugin
- Workspaces
Migration notes
- Migration: built-in activity channels move to the os/ namespace
- Migration — Code Blue becomes an App Framework app
- Migration: window, wallpaper and widget bundles load on demand
- Migration — Posts, Pages, Users, User Edit, Plugins and Comments become App Framework apps
- Migration — the navigation model
- Migration — OpenStation Preferences becomes an App Framework app
- Performance settings move to Extended options
- Presence storage migration
- Migration — the Recycle Bin becomes an App Framework app
- Migration — the shell boots from its own screen
- Migration — Station Home becomes an App Framework app
- Migration: a native window's tabs move to the window chrome
- Migration — WP Explorer becomes the my-wordpress app
- Migration — WordPress package globals are no longer ambient
More
All examples
- AI Agents — extend and invoke from a plugin
- wp.os.ai.ask() — programmatic AI Copilot
- Tune the AI model config
- Custom arrange-menu action
- Open a child window its owner can't cover
- Style a specific admin page inside the iframe
- Code Blue — register your plugin's log file
- Open a file in the Code editor (deep-link from any window)
- Connect to a window — title-bar button + iframe pub/sub
- Content changes — live-refresh every window listing your type
- Custom window chrome (Experimental)
- Register a custom unfocused-window effect
- Example: render a data table
- Real file storage — react to uploads, gate policy, share from PHP
- React to a window being set free onto the real desktop
- Cross-window devtools — instrumentation primitives
- Add a dock item with a badge
- Decorate the dock without forking the renderer
- Replace the dock rail entirely
- Retune the Drafts widget's AI writing assistant
- Gate OpenStation by role
- Iframe-initiated window opens
- Build a feed reader without the bookkeeping
- Inject data into openStationConfig
- Render a list without losing clicks — renderKeyedList()
- Example: layout primitives (body → panel → row → col)
- Use <os-*> components from a plugin that ships as a zip
- Restyle and drive Mio
- Repairable form edits with MIO
- Register a window companion
- Pin your app to the phone tab bar, and react to the mode
- Add an action that works on a whole selection
- WP Explorer — custom post types and their folder
- WP Explorer — add a column to the list view
- Add an action button to a WP Explorer preview pane
- Example: native Posts window
- Example: native window with tabs
- Native windows
- Customize note → post conversion
- Send a notification
- OAuth relay — connect to an external service
- Ship a window as an .os.php app
- OS-file drop
- <os-flyout> — window-scoped sliding card
- Plugins window — extras
- Track who's around — wp.os.presence
- Example: progress bar
- PWA install — surface your own button
- React to window events
- Example: extend the Trash
- Register a slash-command
- Register a desktop theme from a plugin
- Register a game
- Example: register a desktop icon (Jorvy)
- Register a wallpaper
- Register a widget
- Related entities — extend the title bar's "Related" menu
- The native-window render ctx
- Revisions in their own window — extend or redirect "View revisions"
- Programmatic folder sharing
- Share state across multi-bundle plugins — wp.os.createSharedStore()
- Example: loading spinner
- Add an opt-in card to Station Home
- Observe stored-file cleanup failures
- Accept drops on your desktop icon
- Give a tile two icons, one per state
- Add a row to a window's ⋯ menu
- Example: window activity & the status ring
- Window controls
- Subscribe to window lifecycle events
- Window links — relate windows and restyle the ties (Experimental)
- Window loading state — spinner overlay & ready signal
- Show a banner at the top of a window
- Pulse a window's icon — Window.requestAttention()
- Register a custom window reveal
- Window slots
- Window themes
- Native window with bundle-bound config
- Place something where the user can reach it — wp.os.workArea
- Ship a workspace template