* fix(config): accept daemon settings in the published editor schema The website schema omitted accepted configuration fields, so editors rejected valid browser, profile, plugin and metadata settings. Regenerate from the daemon schema and guard the published artifact against drift. Co-authored-by: Okan YILDIRIM <63511519+ragokan@users.noreply.github.com> * fix(config): preserve proxy help when regenerating the schema Keep the existing editor descriptions in the source schema so regeneration retains them. The new regression fails when the proxy descriptions disappear. * test(usage): create SQLite store fixtures in one transaction The Windows plugin suite exceeded its five-second test deadline while creating and exercising the first OMP store fixture. Commit the fixture as a unit rather than flushing each inserted row separately; preserve the read-only discovery assertions. * test(config): show structured schema validation errors --------- Co-authored-by: paseo-bot[bot] <266920839+paseo-bot[bot]@users.noreply.github.com> Co-authored-by: Okan YILDIRIM <63511519+ragokan@users.noreply.github.com>
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.