Skip to content

Normalize workbench empty states - #4534

Open
wailingwombat wants to merge 1 commit into
masterfrom
anna/workbench-empty-states
Open

wailingwombat wants to merge 1 commit into
masterfrom
anna/workbench-empty-states

Conversation

@wailingwombat

Copy link
Copy Markdown
Collaborator

Every workbench screen had its own empty state: the design-system EmptyState, EmptyStateCompact, a Card + EmptyState pair, a custom usage placeholder, or loose text. This PR puts them all on one pattern, based on the Files tab design, and rewrites the copy so each one says what's empty and what to do next.

New components/workbenches/common/WorkbenchEmptyState.tsx (workbench-scoped for now, so the design-system EmptyState used across the rest of the app is unchanged)

  • WorkbenchEmptyState: a centered card with a body1Bold title, a body2 / text-light description, and optional actions.
    • variant="plain" drops the card border and fill. It's used inside existing cards, panels, and charts so cards don't sit inside cards.
    • inset={false} drops the outer padding when the parent already pads its content.
  • WorkbenchEmptyText: one text-xlight line for narrow sidebars and list columns.

Where it's used

  • Not-found pages (workbench, job, monitor, dashboard, chatbot, schedule, saved prompt, webhook trigger): a title, a reason, and the existing back button.
  • List pages (webhooks, chatbots, schedules, saved prompts, skills, knowledge, tools, the workbench list, dashboards with no panels): one card replaces Card + EmptyState.
  • Board, grouped, and details views (BoardEmptyList): the copy changes depending on whether a search, filters, or nothing at all emptied the list. Filtered lists get a primary "Reset filters" button. A new sidebar prop renders the light text in the 350px list column.
  • Jobs, Issues, and Alerts details: the main pane showed nothing when the list was empty. It now shows the card.
  • Monitoring: with no dashboards or monitors, the page says so and offers "Add dashboard" / "Add monitor". Otherwise it says "Nothing selected".
  • In-panel states (no metric or log data, no data source, threshold preview unavailable, token or cost usage unavailable, alert annotations and tags): the plain variant.
  • Sidebars (Files tree, Evals, Monitoring search): WorkbenchEmptyText.

Copy examples:

Where Before After
Issue conclusion No job has been run for this issue yet. No conclusion yet: A conclusion will show up here once a job has run for this issue.
Dashboard panel This panel has no data source. No data source: Connect a data source to this panel to see data.
Not-found pages Workbench not found. Workbench not found: It may have been deleted, or you may not have access to it.
Boards No jobs found. No jobs yet: Jobs show up here when this workbench runs from a prompt, schedule, or trigger.

Not in this PR: the Jobs and Issues tables still use the design-system Table empty state, and the design-system EmptyState itself is unchanged. Once this pattern is signed off, it can be promoted there.

Test Plan

  • yarn tsc --build in js/console passes with no errors.
  • Biome format and lint are clean on the changed files.
  • Checked locally against the demo environment: the Files, Alerts, and Monitoring empty states, plus the list pages with no items.

Test environment: https://console.plrldemo.onplural.sh/

Checklist

  • I have added a meaningful title and summary to convey the impact of this PR to a user.
  • If required, I have updated the Plural documentation accordingly.
  • I have added tests to cover my changes.
  • I have deployed the agent to a test environment and verified that it works as expected (required only when changing agent code).

Plural Flow: console

Co-authored-by: Cursor <cursoragent@cursor.com>
@wailingwombat
wailingwombat requested a review from a team as a code owner October 15, 2026 21:30
@wailingwombat wailingwombat added the frontend Changes related to the frontend label Oct 15, 2026
@wailingwombat

Copy link
Copy Markdown
Collaborator Author
Screenshot 2026-10-15 at 5 31 54 PM Screenshot 2026-10-15 at
<img width= 5 32 02 PM" src="https://github.com/user-attachments/assets/7 Screenshot 2026-10-15 at 5 32 20 PM 27519fe-810f-4fd0-b53c-7e17387dd122" /> Screenshot 2026-10-15 at 5 32 26 PM

@soffi-ai

soffi-ai Bot commented Oct 15, 2026

Copy link
Copy Markdown
Soffi AI Summary

This PR standardizes all empty state UI across the workbench feature into a single, cohesive pattern. Previously, each workbench screen implemented its own empty state using a mix of design-system primitives (EmptyState, EmptyStateCompact, Card + EmptyState, custom placeholders, or plain text), resulting in visual and copy inconsistency across the product.

The fix introduces a new workbench-scoped component (WorkbenchEmptyState) that provides a centered card with a bold title, a descriptive subtitle, and optional action buttons. A variant="plain" mode avoids nested card-in-card layout for panels and sidebars, and an inset={false} prop handles cases where the parent already provides padding. A companion WorkbenchEmptyText component handles narrow sidebar and list-column contexts. The workbench-scoped approach intentionally leaves the global design-system EmptyState untouched; the pattern can be promoted there once this design is signed off.

Beyond component unification, the copy was rewritten across all screens to follow a "title: description" format — stating what is empty and what the user should do next — making empty states consistently informative and actionable. Filtered and searched list views also now contextually adapt their message and offer a primary "Reset filters" button when applicable.

Changes

Unified workbench empty states

  • Introduced a new WorkbenchEmptyState component (with plain variant and inset prop) and WorkbenchEmptyText for narrow contexts, then migrated every workbench screen — boards, list pages, detail panes, panels, sidebars, and not-found views — from their individual ad-hoc empty state implementations to the single shared pattern. Rewrote all copy to follow a 'title: description' convention that states what is empty and what to do next. Filtered/searched board lists now adapt their message contextually and offer a 'Reset filters' button as a primary action. (ad9a131)

Updated: 2026-10-15 21:32 UTC

Deploy in Soffi

@greptile-apps

greptile-apps Bot commented Oct 15, 2026 •

Copy link
Copy Markdown
Contributor

RetriggerView in GreptileConfidence Score: 4/5

[Medium impact] Replaces empty state components across workbench UI.

The PR appears safe to merge, with a non-blocking correction needed to the Files tab’s empty message.

Findings

  1. P2 Existing files look missing ▶

Summary

This PR gives workbench screens shared empty-state components and more consistent copy.

  • Workbench pages show a clear empty-state message and a useful next step.
  • Empty boards explain what narrowed the list and what to try next.
  • Monitoring tells you when nothing exists and offers ways to add it.

Reviews (1) · Last reviewed commit: "Normalize workbench empty states" · Reviewed by Greptile

Comment on lines +76 to +77
message="No files yet"
description="Outputs will show here when agents output artifacts."

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Existing files look missing

The Files tab now says “No files yet” whenever selectedPath is missing, even if the sidebar lists files. Opening the tab without a path, or deleting the selected file while others remain, reaches this branch. Users get a false empty message instead of guidance to select a file.

Restore the “Select a file” message here; show “No files yet” only after checking that the file list is empty.

Suggested change
message="No files yet"
description="Outputs will show here when agents output artifacts."
message="No file selected"
description="Select a file from the list to view it."

This branch has not been deployed

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

Labels

frontend Changes related to the frontend

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant