Skip to content

feat(web): add publisher dashboard workspace#2922

Merged
Patrick-Erichsen merged 51 commits into
openclaw:mainfrom
vyctorbrzezowski:brzezowski/publisher-dashboard-workspace
Jul 2, 2026
Merged

feat(web): add publisher dashboard workspace#2922
Patrick-Erichsen merged 51 commits into
openclaw:mainfrom
vyctorbrzezowski:brzezowski/publisher-dashboard-workspace

Conversation

@vyctorbrzezowski

@vyctorbrzezowski vyctorbrzezowski commented Jun 27, 2026

Copy link
Copy Markdown
Contributor

Summary

This PR proposes an owner-aware publisher workspace for managing skills and plugins from one dashboard.

  • What changed: the signed-in dashboard gains publisher switching, actionable review states, catalog controls, download analytics, and direct publishing/import paths.
  • Why: publishers need one operational view for inventory, trust signals, performance, and publishing paths across personal and organization contexts.
  • Follow-up deferred: the platform changelog surface is intentionally removed for now.

What changed

Publisher context and navigation

  • Added personal and organization publisher switching with the active identity carried through dashboard queries and publishing links.
  • Added publisher-aware skill and plugin detail, settings, validation, and security-audit destinations.
  • Added authenticated loading, empty, timeout, and sign-in states for the dashboard.
  • Added a unified “Add skill or plugin” route with owner-aware defaults across dashboard and publishing entry points.
  • Removed the dashboard sidebar toggle icon beside “Add skill or plugin” so the header action row stays focused.

Package inventory

  • Rebuilt the package inventory around shared list and grid views for skills and plugins.
  • Added type filters, sorting, search disclosure, view switching, pagination, and URL-backed dashboard state.
  • Added persistent list/grid preferences.
  • Added package row menus with view, settings, audit, copy, and publishing actions appropriate to each artifact.
  • Added normalized catalog metadata, status labels, owner paths, canonical detail links, and download counts.
  • Kept artifacts that need attention in the package inventory so the dashboard still represents the publisher's complete catalog.

Trust and review workflow

  • Added a “Needs attention” surface that groups security, visibility, validation, and quality findings by artifact.
  • Added blocked, pending, and review severity states with concise context and hidden/removed visibility labels.
  • Added an in-dashboard SkillSpector review sheet with vulnerability patterns and findings.
  • Added an in-dashboard plugin validation sheet with CLI guidance, copyable instructions, error/warning groups, and remediation details.
  • Added a compact security verdict to plugin review sheets while keeping validation findings directly below it.
  • Routed plugin security reviews to the canonical audit surface and retained validation-specific destinations where appropriate.
  • Added manager-scoped plugin inspector findings and the package metadata needed to render real review states.

Download analytics

  • Added publisher-scoped download metrics for skills, plugins, and combined inventory.
  • Added 1-day, 1-week, 1-month, and all-time views with daily series, comparison deltas, chart labels, and tooltips.
  • Added per-item metric selection for skills and plugins.
  • Included complete publisher inventories and legacy personal ownership in aggregate and selected-item metrics.
  • Read canonical skill stats and real package daily stats instead of synthetic chart data.
  • Added date-based chart tooltips and visible zero-value series.

GitHub import and changelog removal

  • Moved GitHub import from the sidebar into a dismissable full-width banner above the dashboard content.
  • Persisted banner dismissal locally and updated the loading skeleton and mobile layout for the new placement.
  • Removed the proposed /changelog route, platform changelog data, changelog sidebar feed, and related styles/tests for now.
  • Removed stale changelog screenshots from this PR body so the proposal does not advertise a postponed surface.

Shared UI and coverage

  • Extended shared browse controls, header behavior, select rendering, skeletons, route generation, and responsive dashboard styles.
  • Added focused coverage for dashboard routing, catalog behavior, attention states, and download metrics.
  • Updated generated Convex API types for the new dashboard query surface.

Linked Issue

  • Closes N/A
  • Related N/A

Behavioural Proof

Reviewed the current dashboard in a real browser against seeded local Convex data after updating the branch with upstream/main. The import banner, attention states, complete package inventory, review sheets, and download charts were exercised locally. Current-head public media proof is still pending.

  • Behavioural proof included

Security / Trust Impact

This PR adds authenticated publisher-scoped reads and manager-scoped inspector findings to render existing security, visibility, and validation state. It reuses the existing identity, publisher membership, ownership, and audit route boundaries; it does not add moderation or scanner write actions.

  • No security/trust impact
  • Security/trust impact explained

Data / Deploy Impact

No schema migration or backfill is required. The change adds Convex query code and generated API typing, so the backend and web app must be deployed together.

  • No data/deploy impact
  • Data/deploy impact explained

Verification

  • bun run test -- src/components/dashboard/DashboardDownloadsInsights.test.tsx src/components/dashboard/dashboardAttention.test.ts src/routes/-dashboard.test.tsx src/components/dashboard/dashboardCatalog.test.ts
  • bun run ci:static
  • bun run ci:unit
  • bun run ci:types-build
  • git diff --check upstream/main...HEAD

@vercel

vercel Bot commented Jun 27, 2026

Copy link
Copy Markdown
Contributor

@vyctorbrzezowski is attempting to deploy a commit to the OpenClaw Foundation Team on Vercel.

A member of the Team first needs to authorize it.

@vyctorbrzezowski

Copy link
Copy Markdown
Contributor Author

@clawsweeper review

@clawsweeper

clawsweeper Bot commented Jun 27, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: the existing ClawSweeper review comment will be edited in place when the review finishes.

@vyctorbrzezowski vyctorbrzezowski marked this pull request as ready for review June 28, 2026 00:03
@clawsweeper clawsweeper Bot added proof: sufficient Contributor real behavior proof is sufficient. proof: 📸 screenshot Contributor real behavior proof includes screenshot evidence. rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. P2 Normal backlog priority with limited blast radius. merge-risk: 🚨 availability 🚨 Merging this PR could cause crashes, hangs, restart loops, stalls, or process outages. labels Jun 29, 2026
@clawsweeper

clawsweeper Bot commented Jun 29, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs real behavior proof before merge. Reviewed July 1, 2026, 3:57 AM ET / 07:57 UTC.

Summary
Adds an owner-aware signed-in publisher dashboard workspace with publisher switching, combined skill/plugin inventory, attention review sheets, download analytics, import/add paths, Convex query support, tests, and styles.

Reproducibility: yes. for the blocking review finding by source inspection: the latest head still collects full publisher skill/package inventories and aggregates per-item daily stats in one dashboard query. I did not run a seeded large-inventory account.

Review metrics: 3 noteworthy metrics.

  • Diff size: +8669/-577 across 42 files. The PR spans Convex queries, generated API types, routes, UI components, tests, e2e coverage, and a large stylesheet change.
  • Public Convex surface: 1 query module added. The new dashboard query is authenticated runtime behavior and creates backend/frontend deploy coupling.
  • Current-head proof artifacts: 0 media/log artifacts found. The contributor proof gate remains open because the PR body and comments do not include current-head dashboard evidence.

Merge readiness
Overall: 🧂 unranked krab
Proof: 🧂 unranked krab
Patch quality: 🧂 unranked krab
Result: blocked until real behavior proof is added.

Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch.

Rank-up moves:

  • [P1] Add current-head real browser screenshots or video for the signed-in dashboard workspace, with private endpoints, tokens, IP addresses, phone numbers, and other private details redacted.
  • [P1] Replace the full-inventory metrics query with a bounded, paginated, capped, or denormalized path and add large-inventory regression coverage.
  • After adding proof to the PR body, let the automatic re-review run or ask a maintainer to comment @clawsweeper re-review.

Proof guidance:

  • [P1] Needs real behavior proof before merge: Missing: the PR body says current-head public media proof is pending, and the comments do not include a current-head real ClawHub browser artifact. After adding proof, update the PR body; ClawSweeper should re-review automatically. If it does not, the PR author or someone with repository write access can comment @clawsweeper re-review.

Mantis proof suggestion
The browser-visible publisher dashboard workspace would benefit from maintainer-run visual proof, though Mantis proof would not replace the contributor proof gate. A maintainer can ask Mantis to capture proof by posting this exact PR comment:

@openclaw-mantis visual task: verify the signed-in publisher dashboard workspace shows publisher switching, attention states, package inventory, import banner, and download stats in a real browser.

Risk before merge

  • [P1] Merging as-is could make /dashboard fail or time out for publishers with large inventories because the new metrics query collects complete publisher inventory and fans out per-item daily-stat reads.
  • [P1] The scalable analytics shape still needs maintainer agreement: capped all-inventory stats, visible-page stats, pagination, or denormalized publisher aggregates.
  • [P1] Current-head real behavior proof is missing, so the signed-in dashboard states have not been publicly verified in a real browser at the latest head.

Maintainer options:

  1. Fix dashboard metrics scale before merge (recommended)
    Replace the all-inventory reactive metrics query with a bounded, paginated, capped, or denormalized publisher metrics path and add large-inventory regression coverage.
  2. Narrow initial analytics scope
    Maintainers could land the workspace with stats limited to the visible or capped inventory while a follow-up designs full publisher aggregates.
  3. Pause the stats portion
    If complete publisher analytics are required for launch, pause this PR until the aggregate data model and operator expectations are agreed.

Next step before merge

  • [P1] Human review is needed because maintainers must choose the scalable analytics shape and the contributor must add current-head real browser proof.

Security
Cleared: No concrete secret, dependency, permission, or authorization regression was found; the remaining concrete merge concern is availability.

Review findings

  • [P1] Bound the publisher metrics query — convex/dashboard.ts:219-227
Review details

Best possible solution:

Ship the publisher workspace with a bounded or denormalized analytics path, then verify the signed-in dashboard states in a real ClawHub browser run before merge.

Do we have a high-confidence way to reproduce the issue?

Yes for the blocking review finding by source inspection: the latest head still collects full publisher skill/package inventories and aggregates per-item daily stats in one dashboard query. I did not run a seeded large-inventory account.

Is this the best way to solve the issue?

No. The workspace direction is plausible, but all-inventory metrics should not be implemented as one unbounded reactive query; a bounded, capped, paginated, or denormalized analytics path is the maintainable fix.

Full review comments:

  • [P1] Bound the publisher metrics query — convex/dashboard.ts:219-227
    getDownloadMetrics loads the full publisher inventory and then runs daily-stat aggregation for every skill and plugin. A large publisher can exceed Convex read/time limits and make /dashboard fail, so this needs a bounded, paginated, capped, or denormalized metrics path before merge.
    Confidence: 0.9

Overall correctness: patch is incorrect
Overall confidence: 0.88

AGENTS.md: found and applied where relevant.

Codex review notes: model internal, reasoning high; reviewed against 80b06a911afb.

Label changes

Label justifications:

  • P2: This is a normal-priority feature PR with a concrete availability blocker in the new dashboard metrics path.
  • merge-risk: 🚨 availability: The PR can make the signed-in dashboard fail or stall for publishers with large inventories.
  • rating: 🧂 unranked krab: Overall readiness is 🧂 unranked krab; proof is 🧂 unranked krab and patch quality is 🧂 unranked krab.
  • status: 📣 needs proof: The PR needs real behavior proof before ClawSweeper can clear the contributor ask. Needs real behavior proof before merge: Missing: the PR body says current-head public media proof is pending, and the comments do not include a current-head real ClawHub browser artifact. After adding proof, update the PR body; ClawSweeper should re-review automatically. If it does not, the PR author or someone with repository write access can comment @clawsweeper re-review.
Evidence reviewed

What I checked:

  • Repository policy read: AGENTS.md was read fully; it requires real-browser screenshot proof for UI PRs and calls out Convex query bandwidth rules for bounded/paginated reads. (AGENTS.md:66, 80b06a911afb)
  • Convex guidance read: The checked-in Convex guidance says queries should use bounded collection, .take(), or pagination instead of unbounded .collect() for growing results. (convex/_generated/ai/guidelines.md:242, 80b06a911afb)
  • Live PR state: Live GitHub state shows this contributor PR is open and mergeable, with +8669/-577 across 42 files at head 111a9e4; CI is green except Vercel authorization, and labels still include needs-proof and availability risk. (111a9e4f93be)
  • Current main baseline: Current main has a simpler dashboard with paginated skill loading and a capped package list, but not the proposed attention surface, unified catalog, or download analytics workspace. (src/routes/dashboard.tsx:140, 80b06a911afb)
  • Unbounded metrics inventory: The new all-inventory branch loads publisher skills and packages, then aggregates downloads for every item in one dashboard query. (convex/dashboard.ts:219, 111a9e4f93be)
  • Unbounded collectors and fan-out: The helper paths use .collect() for owned skill/package inventories and Promise.all per item over daily stat queries, so a large publisher can exceed Convex read/time limits before the frontend timeout state appears. (convex/dashboard.ts:87, 111a9e4f93be)

Likely related people:

  • Patrick-Erichsen: Current-main blame for the dashboard route, dashboard skill pagination, and dashboard package listing points to a230d96, and recent history shows adjacent plugin inspector/package work. (role: recent area contributor; confidence: high; commits: a230d962db64, be70ae5e9f9c; files: src/routes/dashboard.tsx, convex/skills.ts, convex/packages.ts)
  • jesse-merhi: Commit 379c187 added skill and plugin download activity graphs, directly adjacent to the analytics this PR expands into the dashboard. (role: download metrics contributor; confidence: medium; commits: 379c1871f4a1; files: convex/lib/downloadTrend.ts, convex/packages.ts, src/routes/dashboard.tsx)
  • vincentkoc: Recent commits touched publisher preservation across the add flow and SkillSpector/package security behavior used by this workspace. (role: publisher and security-flow contributor; confidence: medium; commits: 8e56a9f8120f, 3f66813e70ab; files: src/routes/dashboard.tsx, src/routes/add.tsx, convex/packages.ts)
  • vyctorbrzezowski: Beyond authoring this PR, prior merged history includes owned GitHub import and publisher owner-scope work used by the proposed workspace. (role: publisher/import flow contributor; confidence: medium; commits: 5f0e1ee63936, d854449610b1; files: src/routes/dashboard.tsx, src/routes/add.tsx, convex/lib/publishers.ts)
What the crustacean ranks mean
  • 🦀 challenger crab: rare, exceptional readiness with strong proof, clean implementation, and convincing validation.
  • 🦞 diamond lobster: very strong readiness with only minor maintainer review expected.
  • 🐚 platinum hermit: good normal PR, likely mergeable with ordinary maintainer review.
  • 🦐 gold shrimp: useful signal, but proof or patch confidence is still limited.
  • 🦪 silver shellfish: thin signal; proof, validation, or implementation needs work.
  • 🧂 unranked krab: not merge-ready because proof is missing/unusable or there are serious correctness or safety concerns.
  • 🌊 off-meta tidepool: rating does not apply to this item.

Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics.

How this review workflow works
  • ClawSweeper keeps one durable marker-backed review comment per issue or PR.
  • Re-runs edit this comment so the latest verdict, findings, and automation markers stay together instead of adding duplicate bot comments.
  • A fresh review can be triggered by eligible @clawsweeper re-review comments, exact-item GitHub events, scheduled/background review runs, or manual workflow dispatch.
  • PR/issue authors and users with repository write access can comment @clawsweeper re-review or @clawsweeper re-run on an open PR or issue to request a fresh review only.
  • Maintainers can also comment @clawsweeper review to request a fresh review only.
  • Fresh-review commands do not start repair, autofix, rebase, CI repair, or automerge.
  • Maintainer-only repair and merge flows require explicit commands such as @clawsweeper autofix, @clawsweeper automerge, @clawsweeper fix ci, or @clawsweeper address review.
  • Maintainers can comment @clawsweeper explain to ask for more context, or @clawsweeper stop to stop active automation.

@vyctorbrzezowski vyctorbrzezowski force-pushed the brzezowski/publisher-dashboard-workspace branch from c439672 to f609b7e Compare June 30, 2026 17:53
@clawsweeper

clawsweeper Bot commented Jun 30, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: the existing ClawSweeper review comment will be edited in place when the review finishes.

@clawsweeper clawsweeper Bot added rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. and removed proof: sufficient Contributor real behavior proof is sufficient. proof: 📸 screenshot Contributor real behavior proof includes screenshot evidence. rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. labels Jun 30, 2026
@vyctorbrzezowski

Copy link
Copy Markdown
Contributor Author

@clawsweeper review

@clawsweeper

clawsweeper Bot commented Jun 30, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: the existing ClawSweeper review comment will be edited in place when the review finishes.

@nancymx-dev

Copy link
Copy Markdown
Contributor

Hey @vyctorbrzezowski, awesome designs 💯

I just have two ideas, again these screenshots are just rough ideas the UI is very rough.

For the switching accounts part I wonder if we could same some real estate if we moved it under profile. Again tho I'm new to Clawhub so let me know if that's not feasible for the user experience.
image

Something else I wonder is whether we'd like to explore potentially having it organised more like a table structure. I'm just thinking if there's a lot of plugins and skills. In future it might help adding filtering by column options and sort by etc. as well.
image

These are just my grain of salt ideas 😄

@Patrick-Erichsen Patrick-Erichsen merged commit a89bfaf into openclaw:main Jul 2, 2026
25 of 26 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

merge-risk: 🚨 availability 🚨 Merging this PR could cause crashes, hangs, restart loops, stalls, or process outages. P2 Normal backlog priority with limited blast radius. rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants