Broker native Eve dashboards

This commit is contained in:
Meta Vens 2026-05-31 01:23:15 +01:00
commit f2ae17f342
7 changed files with 559 additions and 80 deletions

View file

@ -2,25 +2,34 @@
## Objective
Use EveCanvas as a native Mimir operator dashboard: scene graph, source panels,
visibility/reset controls, and multitouch transform editing. Eve renders the
control surface locally and sends edit intents to Mimir; it does not own final
composition.
Use EveCanvas as a native operator dashboard substrate: Mimir, StreamPixels, and
other local/Yggdrasil-routed apps can publish retained dashboard trees while Eve
renders the control surface locally and sends edit intents back. Eve does not
own final composition or run remote UI code.
## Authority Map
- Owner: Mimir owns accepted dashboard state and transform truth.
- Owner: each dashboard provider owns its accepted state and command handling.
The Starfire broker owns provider discovery/routing. EveCanvas owns native
rendering, hit-testing, and touch affordances.
- Inputs: Eve sends `select`, `move`, `scale`, `rotate`, `toggle-visibility`,
and `reset-transform` commands over `/eve/dashboard`.
- Outputs: Mimir sends `dashboard-state` snapshots with nodes, health,
visibility, dimensions, transform, selected node, and LUT preset.
`reset-transform`, and `open-provider` commands over `/eve/deck`.
- Outputs: providers send `dashboard-state` snapshots with provider id, title,
nodes, health, visibility, dimensions, transform, selected node, and LUT
preset. Provider catalogs are exposed at `/eve/deck/providers`.
- Derived state: Eve's UIKit panels are local render projections of Mimir
state.
state/provider state.
- Forbidden writers: Eve gestures do not mutate program layout directly; they
request changes and then re-render the accepted snapshot.
request changes and then re-render the accepted snapshot. Remote apps do not
ship arbitrary JavaScript or native code into Eve.
- Cut line: no camera-stream fanout to Eve for the dashboard. Source previews
may be added later as thumbnails/proxies, but dashboard control must not
require Starfire to render every camera feed for the iPad.
- CultMesh line: dashboard manifests and states now have typed
`mimir.eve_dashboard_manifest.v1` and `mimir.eve_dashboard_state.v1`
document shapes. The live iPad lane remains WebSocket/TCP because it is the
proven transport and works over SSH tunnels; CultMesh should mirror compact
state where the local mesh substrate is available.
## Runtime
@ -32,16 +41,46 @@ dotnet run --project .\src\Mimir.EveDashboard\Mimir.EveDashboard.csproj -- --por
EveCanvas connects to:
```text
ws://192.168.1.66:8795/eve/deck
```
The compatibility endpoint remains:
```text
ws://192.168.1.66:8795/eve/dashboard
```
Broker inspection endpoints:
```text
http://192.168.1.66:8795/health
http://192.168.1.66:8795/eve/deck/manifest
http://192.168.1.66:8795/eve/deck/providers
ws://192.168.1.66:8795/eve/deck/{providerId}
```
Extra providers can be registered at launch:
```powershell
dotnet run --project .\src\Mimir.EveDashboard\Mimir.EveDashboard.csproj -- `
--port 8795 `
--provider "app.id|App Title|ws://127.0.0.1:14000/eve/deck"
```
## Current State
`Mimir.EveDashboard` currently serves fixture scene nodes for the first native
control proof. It accepts transform/visibility commands, mutates the server-side
state, increments the state version, and broadcasts the new snapshot. The next
cut is replacing fixture state with live `MimirPresentationControlState` and
`Mimir.EveDashboard` now runs as a small native dashboard broker. It includes:
- `eve.dashboard.broker`: the switchboard rendered as provider cards.
- `mimir.stream.layout`: the existing Mimir source-layout fixture provider.
- `yggdrasil.streampixels.edge`: the first Yggdrasil/StreamPixels service
dashboard placeholder for the TCP/SSH-routed live edge.
The Mimir provider still serves fixture scene nodes for the first native control
proof. It accepts transform/visibility commands, mutates the provider state,
increments the state version, and broadcasts the new snapshot. The next cut is
replacing fixture state with live `MimirPresentationControlState` and
`MimirSceneEditorState` snapshots.
## Verification
@ -60,3 +99,12 @@ The first device screenshot proved the dashboard rendered on Eve, but also
showed the legacy debug overlay occluding the hierarchy panel. EveCanvas hides
that overlay while dashboard mode is active; dashboard status remains in the
native dashboard footer.
The broker smoke on 2026-05-31 verified:
- `/health` reports active provider, client count, transport, and typed
CultMesh dashboard document name.
- `/eve/deck/providers` returns the three built-in provider manifests.
- WebSocket `/eve/deck` sends the switchboard snapshot.
- `open-provider` switches to `mimir.stream.layout` and broadcasts that
provider state.