Files
paseo/packages/website
Mohamed Boudra b474beedce Homepage shows an agent building a plugin live (#8515)
* feat(website): show agents building plugins on the homepage

The plugins section now leads with the workflow instead of the API list:
you ask an agent for a panel and it appears, without a restart. It plays
as a timeline (prompt, tool calls, result) and then slides in the panel
the agent built, followed by the 400+ community plugins and their
categories. It moves above the automation section.

Mock tool calls on the homepage now match the app's collapsed timeline
rows: same labels and icons, muted text in the UI font, and Paseo MCP
tools named by action ("Create agent"). The hero pills are now nouns.

* fix(website): show the finished plugin demo when motion is reduced

The demo staged its items and slid the panel across its width even for visitors who ask for reduced motion. It now starts in its finished state for them, matching the hero mockup.
2026-11-02 10:50:12 +07:00
..

Paseo website

Plugin install counts

Clients report an install by resolving a plugin with X-Paseo-Install: 1 or ?intent=install, using /api/plugins/resolve/<owner>/<slug> or /plugins/<owner>/<slug>.json. Ordinary resolves do not count. These numbers measure install intent, not successful artifact installation or npm downloads.

The worker requires Cloudflare's CF-Connecting-IP header to count a report. It stores the plugin ID plus a SHA-256 hash of the IP in a WEBSITE_CACHE KV key with a one hour TTL, never the raw IP. An existing key skips the count; repeats do not extend the hour. Missing or empty IP headers do not count.

Accepted reports increment the existing all-time total and UTC daily buckets in WEBSITE_CACHE. Daily buckets retain 60 days and supply the website's seven-day and thirty-day rankings. /api/plugins/installs still returns plugin IDs mapped to all-time totals. The registry build reads that endpoint into the published plugin details and index; the website reads windowed counts from KV through its five-minute cache. Existing counts remain intact. The KV guard is advisory: concurrent requests and KV propagation are not serialized.