Skip to content

Per-pack dashboard widgets #208

Closed as not planned
Closed as not planned

Description

@larstalian

Context

The OpenRange dashboard is domain-agnostic — it shows the world
graph, builder lineage, and request log. That's the right baseline.
But each domain has a natural visualization the generic graph view
doesn't capture:

  • Cyber: service topology + vuln chain + attack path
  • Trading: order book depth + P&L curve + order timeline
  • Robotics: 3D scene + trajectory + collision/contact events
  • Social / negotiation: dialogue tree + intent graph

Asking the dashboard to know about each of these doesn't scale —
the dashboard would accumulate domain logic. The right move is
packs ship their own widgets.

What this issue tracks

Add a plugin point so packs can register pack-specific dashboard
widgets. The dashboard core renders the generic views; each
installed pack contributes its own panels.

Open design questions — design doc PR before code:

  • Where does widget code live? In the pack package? A sibling
    package? Loaded as a JS bundle from the pack folder?
  • How are widgets loaded? Entry point on the Python side
    (openrange.dashboard.widgets) that returns JS+CSS strings? Or
    bundled JS shipped alongside the pack?
  • What's the data contract? Widgets need access to pack-defined
    state (graph nodes by type, request log filters, custom event
    streams). Define a stable widget API so widgets don't break on
    every dashboard refactor.

Why it matters

Without this, every new pack that lands either lives without
domain-shaped visualization (annoying) or pushes its UI logic into
core dashboard code (doesn't scale). Plugin point lets each pack
own its inspection surface.

Where to start

  • src/openrange/dashboard/ — current dashboard package.
  • src/openrange/core/pack.py — Pack ABC; the new hook would
    go alongside verifier_helpers / runtime_backings /
    default_builder.
  • src/openrange/packs/cyber_webapp_offense_v1/codegen/discovery.py
    — the cyber discovery payload is what a cyber-specific widget
    would render.

Acceptance

  • Design doc PR with the widget API + loading mechanism.
  • Reference implementation: cyber pack ships a topology widget
    that visualizes the service graph + oracle path better than the
    generic view.
  • Generic dashboard renders without the widget when no pack widgets
    are installed.

Notes

Don't design this in isolation. Ship the inspector improvements
(#206) first; if the resulting view is good enough that pack-specific
widgets aren't urgent, this issue can wait.

Activity

  1. changed the title [-][roadmap] Pluggable per-pack dashboard widgets[/-] [+]Pluggable per-pack dashboard widgets (cyber topology, trading order book, robotics scene)[/+] on May 4, 2026
  2. changed the title [-]Pluggable per-pack dashboard widgets (cyber topology, trading order book, robotics scene)[/-] [+]Per-pack dashboard widgets[/+] on May 4, 2026
  3. larstalian commented on Oct 12, 2026

    @larstalian
    ContributorAuthor

    No longer involved with this project, so closing my open issues. Feel free to reopen anything you still want to track.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    dashboardDashboard surfacedesign-neededNeeds a design pass before coderoadmapTracked on the public roadmap

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions