Skip to content

th api dashboard layout get/add/remove (SMOODEV-2753)#272

Open
brentrager wants to merge 2 commits into
mainfrom
th-c7f72b-dashboard-layout
Open

th api dashboard layout get/add/remove (SMOODEV-2753)#272
brentrager wants to merge 2 commits into
mainfrom
th-c7f72b-dashboard-layout

Conversation

@brentrager

Copy link
Copy Markdown
Contributor

Problem

The main-dashboard widget layout (per user + org, GET/PUT /organizations/{org}/dashboard/layout on api-prime) had no CLI surface — adding a widget meant the web picker or hand-rolled curl with a user JWT.

Solution

th api dashboard layout get|add|remove:

  • get — prints the saved (or org-default) layout as JSON (--type, defaults main).
  • add <widget_id> — read-modify-write: appends to the layout (renders at the end of the dashboard — widget order is ARRAY order; the grid x/y are legacy) with the web's size→span mapping; the server validates the widget id against its registry so typos fail loudly. Duplicate adds rejected client-side.
  • remove <widget_id> — the inverse.

Rides the user JWT (UserClient) because layout rows are keyed by user id — M2M can't own a layout. Unit tests cover the size mapping and layout-shape tolerance.

Verification

  • cargo fmt clean, cargo clippy 0 warnings, cargo test dashboard 2/2.
  • Dogfooded against prod during SMOODEV-2753: the same GET/PUT flow (raw) placed aws_cost_forecast on the Smoo AI org dashboard; CLI re-run once merged.

Supersedes #269 (Actions never processed events for that branch). Pearl th-c7f72b · SMOODEV-2753 (smooai side: SmooAI/smooai#3476, #3487)

🤖 Generated with Claude Code

https://claude.ai/code/session_01PFBBaG8GMKhVKntX36dkys

brentrager and others added 2 commits July 25, 2026 16:44
The main-dashboard widget layout (per user + org, served by api-prime's
GET/PUT /organizations/{org}/dashboard/layout) had no CLI surface — adding
a widget meant clicking the web picker or hand-rolling curl with a user
JWT. Add 'th api dashboard layout get|add|remove': add is a
read-modify-write that appends below the current grid using the web's
size→span mapping and lets the server's registry validation reject unknown
ids loudly; remove is the inverse; get prints the saved-or-default layout.
Rides the user session (layout rows are keyed by user id, so M2M cannot
own one). First consumer: adding the new aws_cost_forecast widget to the
Smoo AI org dashboard.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PFBBaG8GMKhVKntX36dkys
@changeset-bot

changeset-bot Bot commented Jul 26, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 55dfec5

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
Name Type
@smooai/smooth Minor

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant