Plugin host architecture + Play mode fixes + Keyboard shortcut forwarding + Game-video QTE timeline
The interface has been rebuilt around a plugin-host architecture with typed EventBus, CommandsRegistry, ContextKeys, and a PluginLoader with topological setup. Play mode received critical fixes — equirect HDR skybox loading, animation plugin SSOT, scene GUID resolution, and pointer-capture no longer conflicts with pointer-lock. Global keyboard shortcuts now forward from iframes. The game-video workbench introduces a QTE timeline with appear/hit/vanish moments and an extension protocol for graph-first editing.
Plugin-host architecture
The interface layer has been rebuilt around a formal plugin-host architecture. Key components include:
- EventBus with typed events, middleware, and destroy semantics
- CommandsRegistry with when-predicates and registration hooks
- ContextKeys with observable change subscriptions
- PluginLoader with topological dependency sorting and capability-gated pending
- StorageApi and CapabilityRegistry for persistent state and plugin capabilities
This foundation replaces the previous monolithic store with a composable, testable plugin system. Panels (editor, chat, agents, files, settings, dashboard) are now contributed by individual plugins rather than hardcoded in the app shell.
Play mode: critical fixes
Several bugs that prevented Play mode from working correctly have been fixed:
- HDR skybox: equirect
.hdrfiles now bake withkind:'equirect'so the skybox loads properly at runtime. - Animation SSOT: the animation plugin now self-owns its
AnimationAssetResolver, eliminating duplicate ticking. - Scene GUID resolution: the Play button routes the default scene through
AssetRegistry.instantiate, preventing "SharedRefReleasedError" on repeated plays. - Pointer-capture vs pointer-lock:
setPointerCaptureis no longer called while the pointer is locked, fixing the top-down camera lock bug in game templates. - Exit game view: pressing G or Esc now correctly exits the game view when in edit mode.
Keyboard shortcut forwarding
Global shortcuts (Cmd+K / Ctrl+Shift+* / Esc) are now forwarded from edit and play iframes into the main editor, so command palette and panel toggles work regardless of which frame has focus. Editor edit-domain shortcuts (Delete, F2, Ctrl+D, Ctrl+A, G) are also registered through the new keyboard router.
Game-video workbench: QTE timeline
The game-video workbench (wb-game-video) introduces a QTE (Quick Time Event) timeline that converges to three discrete moments — appear, hit, and vanish — replacing the previous continuous qte_window track. The workbench also adopts a graph-first editing surface with an extension protocol, enabling third-party node types to be registered at runtime.
Streamed chat text micro-batching
The AI chat now micro-batches streamed text and thinking tokens using requestAnimationFrame, resulting in smoother rendering during long responses. Large pastes are automatically folded into a collapsible pill to keep the conversation view clean.
Engine startup failure detection
bun fx start now detects and reports engine startup failures instead of silently returning 500 errors. If the engine process crashes or fails to bind its port, the CLI surfaces a clear error message.