Files
open-design/plugins/_official/design-systems/cursor/open-design.json
lefarcenandGitHub da7c4ae051 fix(web): rank Community "Newest" by shipped publishedAt, not local install timestamps (#5597)
* fix(web): rank Community "Newest" by shipped publishedAt, not local install timestamps

The Community gallery Newest toggle sorted by the installed-record
updatedAt/installedAt. Those are stamped when a machine seeds its own
database, so a fresh install (or an upgrade that re-stamps the catalog)
writes the whole bundled catalog milliseconds apart in folder-walk
order — Newest showed reverse walk order (roughly reverse-alphabetical),
unrelated to publication recency.

Root-cause fix: bundled templates now ship a real publication date.

- packages/contracts: add optional manifest field publishedAt (ISO 8601).
- apps/web sortByNewest: freshness = publishedAt when parseable, else
  updatedAt (right signal for user-installed plugins); tie-breaks and
  stability unchanged.
- plugins/_official: backfill publishedAt into all 460 bundled manifests
  from each folder's first-appearance commit date in upstream git
  history.
- e2e: repository-resource guard requiring every bundled manifest to
  declare a parseable publishedAt, so the signal cannot silently erode.
- docs: field reference entries in plugins-spec (en + zh-CN).

Issue: https://plane.powerformer.net/open-design/projects/49832a02-3158-4faf-bf2f-d0e39c40c7e6/issues/ca0778af-97f5-4fc0-bc63-739280904979

Generated-By: looper 0.0.0-dev (runner=worker, agent=claude-code)

* worker: 模板用最新筛选,筛选出来的不是最新的

Generated-By: looper 0.0.0-dev (runner=worker, agent=claude-code)

* fix(web): keep shipped appeal order inside same-publishedAt batches

Review follow-up (#5597, nettee): after the freshness tie on an equal
publishedAt, the comparator still consulted local updatedAt/installedAt,
which a fresh install stamps in folder-walk order — so every
same-publication batch (largest: 322 manifests on one catalog date)
re-sorted per machine instead of keeping the shipped visual-appeal
ranking. Same-publishedAt records now preserve their incoming position;
local timestamps break ties only when at least one side has no usable
publishedAt. Adds the requested regression spec pinning
same-publishedAt / different-updatedAt records.

Generated-By: looper 0.0.0-dev (runner=worker, agent=claude-code)

* fix(web): gate publishedAt freshness to bundled records; untrack oversized looper attachment

Review follow-up (#5597, nettee round 2): publishedAt was overriding
updatedAt for every visible plugin, so a user-installed github/local/
marketplace plugin carrying an old manifest publishedAt would be buried
behind bundled templates despite a newer local install. publishedAtMs
now returns null for non-bundled records — "Newest" means install
recency for user installs, catalog publication for bundled ones. Adds
the requested regression (non-bundled, old publishedAt, newer
updatedAt) and clarifies the field docs (en + zh-CN).

CI repair: commit 578f7a9 tracked .looper-attachments/bug13_1.png
(3.8MB bug screenshot), tripping the Static gate 1MiB blob guard and
the Validate workspace aggregate. Untrack it and gitignore
.looper-attachments/ so harness attachments stay out of the repo.

Generated-By: looper 0.0.0-dev (runner=worker, agent=claude-code)
2026-07-14 08:43:57 +00:00

114 lines
4.1 KiB
JSON

{
"$schema": "https://open-design.ai/schemas/plugin.v1.json",
"specVersion": "1.0.0",
"name": "design-system-cursor",
"title": "Cursor",
"title_i18n": {
"zh-CN": "Cursor",
"zh-TW": "Cursor",
"ja": "Cursor",
"ko": "Cursor",
"de": "Cursor",
"fr": "Cursor",
"ru": "Cursor",
"es": "Cursor",
"pt-BR": "Cursor",
"it": "Cursor",
"vi": "Cursor",
"pl": "Cursor",
"id": "Cursor",
"nl": "Cursor",
"ar": "Cursor",
"tr": "Cursor",
"uk": "Cursor",
"en": "Cursor"
},
"version": "0.1.0",
"publishedAt": "2026-05-12T07:18:16Z",
"description": "AI-first code editor. Sleek dark interface, gradient accents.",
"description_i18n": {
"zh-CN": "AI 优先的代码编辑器。简洁的深色界面,渐变色点缀。",
"zh-TW": "AI 優先的程式碼編輯器。簡潔的深色介面,漸層色點綴。",
"ja": "AI ファーストのコードエディタ。洗練されたダークインターフェース、グラデーションアクセント。",
"ko": "AI 우선 코드 에디터. 세련된 다크 인터페이스, 그라데이션 액센트.",
"de": "KI-first Code-Editor. Elegantes dunkles Interface, Farbverläufe als Akzente.",
"fr": "Éditeur de code axé sur l'IA. Interface sombre élégante, accents en dégradé.",
"ru": "Редактор кода с приоритетом ИИ. Элегантный тёмный интерфейс, градиентные акценты.",
"es": "Editor de código con IA prioritaria. Interfaz oscura elegante, acentos degradados.",
"pt-BR": "Editor de código com IA em primeiro lugar. Interface escura elegante, acentos em gradiente.",
"it": "Editor di codice AI-first. Interfaccia scura elegante, accenti sfumati.",
"vi": "Trình soạn thảo code ưu tiên AI. Giao diện tối thanh lịch, điểm nhấn gradient.",
"pl": "Edytor kodu stawiający na AI. Elegancki ciemny interfejs, gradientowe akcenty.",
"id": "Editor kode berbasis AI. Antarmuka gelap yang elegan, aksen gradien.",
"nl": "AI-first code-editor. Strak donker interface, verloopaccenten.",
"ar": "محرر أكواد يعتمد على الذكاء الاصطناعي. واجهة داكنة أنيقة، لمسات متدرجة.",
"tr": "AI öncelikli kod editörü. Şık koyu arayüz, gradyan vurgular.",
"uk": "Редактор коду з пріоритетом ШІ. Елегантний темний інтерфейс, градієнтні акценти.",
"en": "AI-first code editor. Sleek dark interface, gradient accents."
},
"license": "MIT",
"tags": [
"design-system",
"first-party",
"design",
"developer-tools"
],
"od": {
"kind": "scenario",
"taskKind": "new-generation",
"mode": "design-system",
"scenario": "design",
"surface": "web",
"useCase": {
"query": {
"en": "Generate a {{artifactKind}} using the Cursor design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.",
"zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Cursor design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md."
}
},
"inputs": [
{
"name": "artifactKind",
"label": "Artifact kind",
"type": "select",
"options": [
"landing page",
"dashboard",
"marketing site",
"app screen"
],
"default": "landing page"
},
{
"name": "brief",
"label": "Brief",
"type": "text",
"placeholder": "What should the page communicate?"
}
],
"context": {
"designSystem": {
"ref": "cursor",
"primary": true
},
"assets": [
"./DESIGN.md"
]
},
"pipeline": {
"stages": [
{
"id": "generate",
"atoms": [
"file-write",
"live-artifact"
]
}
]
},
"capabilities": [
"prompt:inject",
"fs:write"
]
}
}