Commit Graph
21 Commits
Author SHA1 Message Date
Marc ChanandGitHub 1d2150007b chore: remove extracted landing-page from the monorepo (#7727)
* chore: remove extracted landing-page from the monorepo

The marketing site now lives in a separate repository. Drop the
Astro app, its GitHub workflows/scripts, and the remaining
monorepo coupling so this workspace no longer builds or deploys it.

* fix: drop leftover landing-page coupling from Teams and skills

Point development enterprise URLs at the deployed marketing origin,
remove nextjs-app skill outputs that no longer emit a page, and stop
advertising apps/landing-page in plugin marketplace metadata.

Generated-By: looper 0.12.0 (runner=fixer, agent=omp)

* fix(ci): restore DSH installer E2E Vitest routing

Removing dsh-bootstrap-identity dropped the only planner route from
tools/release/resources/dsh-bootstrap/ to web_tests_required, so
installer-only PRs skipped e2e/tests/dsh-installer-version-policy.test.ts.

Generated-By: looper 0.12.0 (runner=fixer, agent=omp)

* docs: drop leftover landing-page paths from template assets

The skill contract no longer advertises the extracted Astro app, but
styles.css, compose.ts, and example.html still named deleted
apps/landing-page sources. Describe the standalone template behavior
instead and keep the bundled plugin example in sync.

Generated-By: looper 0.12.0 (runner=fixer, agent=omp)

* docs: keep landing-page off review and test surfaces

Add apps/landing-page to the forbidden-surface review list and stop naming the extracted path in plugin registry acceptance tables.

Generated-By: looper 0.12.0 (runner=fixer, agent=omp)

* fix: drop leftover landing-page refs and bump plugin version

Stop naming the deleted apps/landing-page in the landing-deck demo and
plugin-registry plan. Bump example-open-design-landing to 0.1.1 and keep
the official catalog version aligned with the bundled manifest.

Generated-By: looper 0.12.0 (runner=fixer, agent=omp)
2026-09-03 03:21:08 +00:00
Andre RossandGitHub 33b9b6f1cb Add Handoff to OpenCode plugin (#6948)
* Add Handoff to OpenCode plugin

Registers handoff-od in the community catalog, pointing at its canonical
repository at github.com/ross-sec/handoff-od@v0.1.3.

Bumps the catalog version and metadata.version 0.2.3 -> 0.2.4.

* Repin community/handoff-od to v0.1.4

Addresses the review on #6948: the pinned v0.1.3 release had an empty-slug
deletion path. A project name written entirely outside [a-z0-9] slugified to "",
so join(outRoot, "") resolved to outRoot itself and --force ran
rmSync(outRoot, { recursive: true, force: true }) against it.

v0.1.4 fixes it in two places — a non-empty deterministic fallback slug, and a
guard that refuses any delete/write target which does not resolve to a strict
descendant of the output root — with regression tests for both. v0.1.3 and
earlier are deprecated on npm.

Catalog version 0.2.4 -> 0.2.5.

* Repin community/handoff-od to v0.1.5

Addresses review round 2 on #6948: the pinned v0.1.4 mirrored symlinks without
classifying them, so a link to a file outside the project copied that file's bytes
into the bundle, and a link to an external directory aborted the mirror with
EISDIR/EPERM.

v0.1.5 adds I9 — nothing outside the project directory is ever mirrored, named or
read — applied to the resolved target: internal links are followed and materialized,
internal-but-excluded links are skipped as their target would be, external and
dangling links are refused and named before anything is written or deleted. Raw path
input (--files, --focus, --entry, designSystem.dir) is checked the same way. Phase 03
asserts the finished bundle contains no symlinks at all.

Fixture coverage for file and directory links with targets inside and outside the
project, as requested. 54 tests, green on Linux and Windows. v0.1.4 and earlier are
deprecated on npm.

Catalog version 0.2.5 -> 0.2.6.

* Repin community/handoff-od to v0.1.6

Addresses review round 3 on #6948: depth=both never placed the authored spec in the
bundle. depth was a declared manifest input that phase 00 wrote into state and no
script read, and the documented order ran phase 01 before phase 02 — so the mirror
was snapshotted before the spec existed and nothing refreshed it.

v0.1.6 reorders the workflow so the authored spec exists before the bundle snapshot,
and enforces it: phase 01 refuses at depth=both until the spec is present and
TODO-free, phase 01 and phase 03 both gate the nested spec, and an end-to-end fixture
reads the finished archive's central directory to prove the spec README and its
prototypes are inside it.

The audit that review prompted found two further declared inputs that did not do what
the manifest advertised — includeChats promised a chats/ directory nothing created,
and transport=both emitted only one prompt. Both fixed, and I10 now asserts every
declared input is wired to behaviour and checked by a gate.

64 tests, green on Linux and Windows. v0.1.5 and earlier are deprecated on npm.

Catalog version 0.2.6 -> 0.2.7.

* Repin community/handoff-od to v0.1.7

Addresses review round 4 on #6948: the phase-03 verdict could outlive the bundle it
described. validate.json carried only ok/root/gates, so a --force rebuild or a
post-validation edit left phase 04 archiving a tree phase 03 never inspected —
skipping root purity, symlink rejection, spec completeness and adherence checks.

v0.1.7 clears the verdict before every bundle mutation and binds a successful verdict
to a content digest of the validated tree, which phase 04 recomputes and refuses on
any difference. Phase 04 additionally reads each archive back and compares its file
entries to the validated set rather than comparing counts, and refuses a bundle
containing symlinks the digest walk would not have seen.

Regression fixtures for both paths the review named: a --force rebuild and a
post-validation mutation each make archive creation fail until phase 03 runs again.

75 tests, green on Linux and Windows. v0.1.6 and earlier are deprecated on npm.

Catalog version 0.2.7 -> 0.2.8.

* Repin community/handoff-od to v0.1.8

Addresses review round 5 on #6948: phase 04 could produce a passing archive whose
bytes were never validated. v0.1.7 hashed the tree before invoking the external
archiver and then checked only the archive's entry names, so a file swapped in between
— by another process in the output tree, or a substituted tool — shipped unvalidated.

v0.1.8 records a per-file sha256 in the phase-03 verdict and has phase 04 decode the
finished archive and compare the hash of every regular file it carries against that
record, reporting missing, unexpected and altered contents separately. A failed
archive is deleted rather than left looking finished. Decoding is in-process so the
check does not depend on the same external tool family that wrote the archive.

Regression fixture as requested: a tar shim ahead of the real one on PATH mutates a
bundle file when phase 04 invokes it, then delegates, placing the mutation after the
pre-archive check and before the archiver reads.

77 tests, green on Linux. v0.1.7 and earlier are deprecated on npm.

Catalog version 0.2.8 -> 0.2.9.

* Repin community/handoff-od to v0.1.9

Addresses review round 6 on #6948: the default ZIP transport required an undeclared
host package. zipStrategies() had no candidate on a Linux box with only GNU tar, so
the default workflow failed at the deliverable with 'no working zip writer. Tried 0'.

v0.1.9 writes both formats in-process with node:zlib. engines: node >= 20 and zero
dependencies are now the whole requirement, and nothing external is invoked — which
also means a substituted archiver on PATH cannot affect the output.

Fixtures as requested: the default pipeline run with PATH pointing at an empty
directory, and a hostile tar/zip/bsdtar earlier on PATH asserted never to execute.
Output verified byte-identical against bsdtar, PowerShell Expand-Archive and Python
zipfile; a pax header now carries non-ASCII and long paths, which ustar mangled.

81 tests, zero skipped. v0.1.8 and earlier are deprecated on npm.

Catalog version 0.2.9 -> 0.2.10.
2026-08-18 11:08:54 +00:00
f1a0b60c6c chore: unify product name display to OpenDesign repo-wide (#6998)
* chore: unify product name display to OpenDesign repo-wide

Rename the user-facing product name from "Open Design" to "OpenDesign"
across documentation, web/desktop UI strings, i18n locales, prompts,
plugin/skill/design-system content, changelogs, and specs, matching the
landing-page rename already in flight.

Deliberately excluded so installed-app identity stays untouched:
- packages/release PRODUCT_NAME and everything derived from it
  (app bundle names, installer/registry identity, updater feeds)
- tools/pack, tools/release, apps/packaged, landing page (PR #6983)
- mocks/ recorded traces and LICENSE
- test fixtures and comments that encode real on-disk install paths
  (Open Design.app, Program Files\Open Design, AppData paths)

Validated with pnpm guard, pnpm typecheck, and targeted web/desktop/host
test runs over the renamed strings.

* fix(web): keep two-letter author monogram for CamelCase brand names

authorInitials split words on whitespace only, so the renamed single-token
author name "OpenDesign" produced a one-letter monogram. Treat lower-to-upper
CamelCase boundaries as word breaks so the avatar fallback stays "OD".

* fix(release): restore spaced Windows source artifact names in win.ps1

tools/pack still derives builder outputs from the unchanged PRODUCT_NAME
("Open Design"), so the asset script must look for the spaced filenames.
Matches the mac/mac-intel/linux asset scripts, which were already kept on
the original names.

---------

Co-authored-by: Joey <236967869+joeylee12629-star@users.noreply.github.com>
2026-08-18 07:09:45 +00:00
ebcba704ef feat(prompts): introduce on-demand discovery in SP v2.0 (#6223)
* feat(prompts): introduce on-demand discovery in SP v2.0

* fix(prompts): prevent nested deck label overlap

* fix(plugins): stabilize od-default task routing

* fix: address prompt and deck audit regressions

* fix(prompts): restore plan mode precedence

* fix(daemon): accept all form answer headers

---------

Co-authored-by: bone3deep1962-collab <bone3deep1962@gmail.com>
2026-07-31 02:35:18 +00:00
5435274ab4 Add Humanize PPT plugin (#5655)
* feat(plugins): add Humanize PPT community plugin

Ports LearnPrompt/humanize-ppt (MIT) into plugins/community/ following
the community/hallmark precedent, and registers it in the community
marketplace index (0.2.0 -> 0.2.1).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* fix(plugins): harden humanize-ppt per review — out-dir guard, PPTX fail-closed, packaging (v1.1.1)

- brief mode no longer wipes a non-empty --out unless it carries Humanize
  run markers or --force is passed; wipe semantics documented in SKILL.md
  and docs/local-demo.md
- read_source fails closed on .ppt/.pptx with guidance (extract text
  first; rendered decks go to --qa-from); SKILL.md/SPEC.md wording aligned
- vendor examples/01-ai-tool-update/source.md, inline-fixture fallback in
  smoke_check.py, drop repo-only record_demo_gif.py, point dangling doc
  links at the upstream repo

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* fix(plugins): humanize-ppt review follow-ups — outline-gate markers, shim exit codes (v1.1.2)

- HUMANIZE_OUT_MARKERS now includes outline-preview.md and
  preview-confirmed.json, so the documented --preview-outline ->
  --confirm-outline -> brief flow on one --out is no longer refused by
  the out-dir guard; refusal text, --out help, SKILL.md/SPEC.md/
  docs/local-demo.md list all four markers
- humanize_ppt_v3/v4/v5 shims call sys.exit(main()) like the stable
  entrypoint, so validation failures propagate exit 2 instead of 0
- smoke_check.py gains an outline-gate check (preview -> confirm ->
  brief on one --out, plus the unrelated-out refusal negative path) and
  an exit-code matrix across all five public entrypoints
- plugin 1.1.2, community registry 0.2.3

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-21 07:52:47 +00:00
f80ad9e2dc fix(plugins): add bundled Perplexity AI design-system plugin manifest (#4828) (#4833)
The Perplexity AI system ships a card on /plugins/systems/ from
design-systems/perplexity/, but had no matching bundled-plugin manifest
under plugins/_official/design-systems/perplexity/. As a result
detailHrefForSystemSlug() found no plugin and the card fell back to the
/plugins/systems/ index instead of opening a dedicated detail page.

Add the bundled plugin for perplexity:
- open-design.json: generated via the migrate-to-plugins design-system
  wrapper, then brought to parity with sibling systems (specVersion,
  full title_i18n/description_i18n, localized useCase query). Structure
  is byte-identical in shape to the other design-system manifests.
- DESIGN.md: embedded copy of design-systems/perplexity/DESIGN.md.
- open-design-marketplace.json: register the bundled plugin in the
  official registry seed (sorted insert + bundledPreinstallCount 413->414),
  matching how prior plugin-add commits regenerate the seed.

The landing page now builds a real /plugins/design-system-perplexity/
detail page and the systems-index card links to it.

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-29 14:55:29 +00:00
3a92f8a011 Add web effect extractor scenario (#4811)
Co-authored-by: tuolaji <tuola@tuolajideMacBook-Air.local>
2026-06-26 07:15:53 +00:00
915548b4bd [codex] Fix social template English metadata (#4427)
* Fix social media template English metadata

* Remove social template description hard wraps

Generated-By: looper 0.9.10+codex.autoclean (runner=fixer, agent=codex)

---------

Co-authored-by: Siri-Ray <2667192167@qq.com>
Co-authored-by: Looper <looper@noreply.github.com>
2026-06-17 11:00:06 +08:00
eb749841b4 fix(home): surface community slide decks on Home with letterbox-free 16:9 previews (#4350)
* fix(plugins): surface slides decks on Home instead of marketplace sources

The 23 community slides/deck plugins from #4127 were registered as a
restricted community marketplace source, so they showed up as installable
"available sources" cards (受限 + Install) instead of on Home. Relocate them
to plugins/_official/examples so they ship bundled — appearing in the Home
Community gallery and the deck example-prompt rail, exactly like the existing
zhangzara / swiss / guizang decks — and drop their community-registry entries.

- Move 23 plugins/community/<slug> → plugins/_official/examples/<slug>
  (upstream LICENSE / author / homepage / "Based on" attribution preserved)
- Rename manifest name community-<slug> → example-<slug> (bundled convention)
- Remove the 23 entries from plugins/registry/community/open-design-marketplace.json
  (the 3 pre-existing community entries stay)
- HomeHero: uncap the deck example-prompt rail (other chips keep the curated 18)
  so every bundled slide template is reachable straight from "All"
- curatedPriority: pin the 23 slides to the front of both the deck example rail
  and the Community Slides shelf

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix(home): drop provenance tail from deck seeds & fix deck preview letterbox

Two polish fixes for the slide/deck plugins now surfaced on Home:

1. Example-prompt seed: strip a trailing source-attribution sentence
   ("…。移植自 foo/bar 的 baz 模板。" / "Based on …") from the composer seed so
   the prompt doesn't end on provenance boilerplate. Conservative — only fires
   when the final sentence opens with an attribution marker and real text
   precedes it; attribution woven mid-description (followed by a use-case
   sentence) and the gallery/detail descriptions are left intact. Latin '.'
   only ends a sentence at whitespace/EOL so "STYLE_PRESETS.md" / "github.com/…"
   don't mis-split.

2. Deck gallery preview: decks ship a fixed 16:9 stage that scales to its
   viewport, so the tall scroll-preview frame letterboxed it and showed a dark
   --stage-bg band above/below the slide. Tag deck cards with data-od-mode and
   give them a 16:9 frame the iframe fills natively (no transform, no pan), so
   the stage sits edge-to-edge with no band.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix(home): deck preview frame to 16:9 so no white strip below the slide

The deck preview override targeted the inner html-frame while the gallery frame
kept its fixed 300px height, leaving a white strip under the 16:9 slide. Make
the gallery frame itself 16:9 for deck cards so the stage fills it exactly —
title bar + slide, nothing left over.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix(decks): hide the page-counter chrome on all 23 community slide decks

The five upstream deck families each render a different page-counter ("1 / 10")
— a center pill (.deck-controls), an id="counter" badge, a fixed .deck-counter,
or a .count span inside a Shadow-DOM rail — so the home gallery thumbnails
showed it inconsistently. Per maintainer request, drop it everywhere rather
than unify: inject a display:none rule for the light-DOM counters and inline-
hide the Shadow-DOM .count span. Keyboard/touch navigation is untouched; only
the visual counter is removed.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix(home): fix deck letterbox band in the example-prompt rail tiles too

The earlier 16:9 deck-preview fix only covered the Community gallery cards; the
hero example-prompt rail tiles render the deck in a 4:3 (1440×1080) preview and
still showed a dark --stage-bg band on top. Tag deck preset tiles with
data-od-mode and give them a 16:9 preview the iframe fills natively, matching
the gallery treatment.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix(home): remove the ↗ open-external button from community gallery cards

The ↗ only rendered when a tile's preview was an HTML source, so it
appeared on some cards (most decks, a few prototypes) and not others
(images, srcless tiles) — inconsistent chrome across the shelf. Drop it
and the whole onOpenExternal pass-through (PluginCard → PluginsHomeSection
→ HomeView) plus the now-dead .plugins-home__gallery-open styles.

* fix(home): make the community search clear (×) button visible

The clear button uses the shared <Button> component, whose CSS-module
class set padding 6/12 and crushed the 12px × glyph to zero width inside
the 26px button (a blank grey square). The .plugins-home__search-clear
reset only out-specified the global `button {}` element rule, not the
component class — scope it under .plugins-home__search so the padding:0 /
20x20 sizing actually wins.

* fix(home): align deck example-prompt tile title row with other tiles

Deck preset tiles used a 16:9 `auto` preview row, so their card was
shorter than the fixed-150px sibling tiles; the flex rail stretched them
back up and the slack leaked into the title row, making deck titles ~6px
taller. Keep deck tiles on the standard 150px preview cell and center the
native 16:9 stage inside it (neutral margin, no dark band), so card and
title-row heights match prototype/HyperFrames/image tiles.

* fix(deck-bridge): mirror the visible class so reveal animations fire on navigation

Reveal-animation decks (the frontend-slides family) gate staggered
entrances on a separate `.slide.visible` class that the deck's own show()
adds alongside `.active`. The host bridge's setActive() flipped only the
active class, so bridge-driven page turns showed slide chrome but left
every .reveal child at opacity:0 — the body rendered blank. Mirror
`.visible` in lock-step with the active slide (only for decks that use it,
a no-op elsewhere). Adds a red→green regression test.

* fix(home): unpin the bare Frontend Slides template from the slides shelf

example-frontend-slides is the family-root template with a generic cover;
pinned first it read as filler leading the Slides shelf and deck chip.
Drop it from PINNED_SLIDE_PLUGIN_IDS so it falls to the uncurated tail
while the styled variants (Creative Voltage, Electric Studio, …) keep the
lead.

---------

Co-authored-by: free666799 <293857035+free666799@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 09:32:15 +00:00
ec524986b5 chore(plugins): remove html-ppt-dir-key-nav-minimal and html-ppt-xhs-post (#4212)
* chore(plugins): remove html-ppt-dir-key-nav-minimal and html-ppt-xhs-post

Final cut list from the maintainer review of the slide-template gallery
(narrowed from the originally proposed nine html-ppt studio seeds to
these two; the other seven stay).

Removed across every surface:
- plugins/_official/examples/<slug>/ (2 plugin dirs)
- design-templates/<slug>/ (2 catalogue entries)
- plugins/registry/official/open-design-marketplace.json entries
- apps/web/src/i18n/content{,.ru,.fr}.ts slug keys

Landing-page solution showcases never referenced these two, so no
landing changes are needed. pnpm guard and pnpm typecheck pass;
repo-wide grep for both slugs returns zero hits.

* fix(registry): sync bundledPreinstallCount after removing two plugins

plugins-marketplaces.test.ts asserts metadata.bundledPreinstallCount
equals the registry plugins array length; update 414 -> 412 to match
the two removed entries.

---------

Co-authored-by: qiongyu1999 <2694684348@qq.com>
2026-06-13 13:15:04 +00:00
01d8e6baab feat(plugins): 23 community slides/deck plugins from top open-source slides skills (#4127)
* feat(plugins): add 30 community slides/deck plugins from top open-source slides skills

Convert the highest-starred MIT-licensed slides skills into community deck
plugins (one template style = one plugin), plus 3 family root plugins:

- frontend-slides (zarazhangrui, 21.1k stars): root + 7 style variants (fs-*)
- huashu-design (alchaincyf, 18k stars): slides cut root + 8 variants (huashu-*)
- html-ppt-skill (lewislulu, 5.8k stars): root + 9 theme variants (hps-*)
- visual-explainer (nicobailon, 8.7k stars): 3 aesthetics (ve-*)

Each plugin ships the standard trio (open-design.json + SKILL.md locked spec +
self-contained example.html seed, zero external JS), validated against
PluginManifestSchema. All 30 registered in the community marketplace registry
(0.1.2 -> 0.2.0). Every variant was deduped against the 59 existing official
deck plugins (zhangzara ports, guizang, html-ppt family) before inclusion.
Upstream attribution preserved: MIT LICENSE files + author/homepage per plugin.

* feat(plugins): unify all 30 community deck seeds with the Open Design product narrative

Replace per-deck placeholder content with one canonical 10-section story
sourced from the homepage structure doc and README: cover, why (Claude
Design proved it, OD opens it), three claims, numbers board (60K+ stars /
300+ contributors / 217+ plugins / 129 design systems / 21 agents), 5-step
workflow, multimodal outputs, capabilities, agent ecosystem, testimonial,
and CTA with GitHub/Discord/X links for organic resharing.

Content-only edits: CSS tokens, layouts, decorations, animations, keyboard
nav and hash routing untouched in every deck. huashu-* decks carry the zh
copy; fs-/hps-/ve- decks carry the en copy (latin display faces). All 29
rewrites + 1 pilot verified: script syntax, cover screenshot, no fictional
brand residue.

* fix(ve-presets): align preview motion and slideCount with example contracts

Review follow-up for #4127 (mrcfps):
- ve-midnight-editorial / ve-terminal-mono / ve-warm-signal set
  od.preview.motion to "deck" while their example.html files are
  vertical scroll-snap documents; switched to "scroll" so the
  marketplace hover clip traverses them correctly.
- ve-terminal-mono / ve-warm-signal advertised slideCount options
  (5-10 / 10-20 / 20+) that the locked prompt overrode with a hard
  8-11 requirement; the prompt now honors {{slideCount}}, and the
  SKILL.md slide-count rule is rephrased as a default that yields to
  the user's selection.

* style(community-slides): anti-slop polish across the 30 community deck seeds

Visual polish sweep (taste-skill + impeccable + gsap-skills guidelines)
over every community slides plugin example:

- All theme tokens stay LOCKED to each plugin's od.useCase.query spec;
  polish is limited to spacing rhythm, contrast (WCAG AA), hairline
  discipline, and prefers-reduced-motion guards.
- Motion only via transform/opacity; engine scripts byte-identical.
- Content unchanged: copy, numbers, links and slide counts match the
  previous seeds; SKILL.md craft notes updated where the polish touched
  documented details.

* fix(fs-presets): honor requested slideCount in fs-dark-botanical and fs-notebook-tabs

Review follow-up for #4127 (mrcfps, round 2): both plugins offered
medium/long slideCount options in their pickers while the en query and
SKILL.md hard-locked 8-11 slides, so picking 'medium 12-16' or 'long'
still produced an 8-11 deck. Same contract fix as the ve-* presets in
c2acb0c86:

- open-design.json en query now says 'match the requested slide count
  ({{slideCount}})' instead of a hard 8-11.
- SKILL.md states 8-11 as the default and honors the user's pick.

* i18n(community-slides): translate all Chinese deck seeds to English

All slide plugin example seeds are now English-only per template policy:
the 9 huashu-* decks (~7,200 CJK chars), html-ppt-studio and
hps-y2k-chrome (CSS-comment-level residue) are fully translated.

- Theme tokens, engine scripts, slide counts, stats (60K+/300+/217+/
  129/21/-80%) and links are unchanged; only content language changed.
- CJK-specific Google Fonts swapped to their Latin equivalents where
  the translated text used them (Noto Serif/Sans SC -> Noto Serif/Sans
  in huashu-takram-soft-tech and huashu-slides); locked token stacks
  untouched elsewhere.
- Minor type-size adjustments where English copy ran longer than the
  Chinese original (huashu-annual-letter prose/quote).
- Every deck screenshot-verified for overflow; zero CJK characters
  remain in any community example.html.

* chore(community-slides): drop four plugins per design review

Remove fs-bold-signal, hps-aurora-glass, html-ppt-studio, and
ve-warm-signal from the community slides batch — cut in the maintainer
design pass over the full template gallery (fs-bold-signal duplicates
the frontend-slides root look; hps-aurora-glass and html-ppt-studio
read closest to generic gradient decks; ve-warm-signal overlaps the
other two ve-* presets).

- Their marketplace entries are removed from
  plugins/registry/community/open-design-marketplace.json.
- hps-true-blueprint SKILL.md no longer points at the html-ppt-studio
  root plugin as if it shipped in-repo; it now references the upstream
  system the hps family is ported from. The remaining hps-* decks are
  self-contained single files and unaffected.

* chore(community-slides): drop fs-dark-botanical per design review

Second cut from the maintainer gallery pass. Plugin directory and its
marketplace registry entry removed; no other references existed.

* chore(community-slides): drop hps-catppuccin-mocha and hps-vaporwave per design review

Third cut from the maintainer gallery pass. Plugin directories and their
marketplace registry entries removed; no other references existed.

---------

Co-authored-by: qiongyu1999 <2694684348@qq.com>
2026-06-12 09:17:58 +00:00
2940876409 feat(plugins): refresh HyperFrames video templates from html-video (#4063)
* feat(plugins): refresh HyperFrames video templates from html-video

Replace the 11 HeyGen catalog stub entries (no bundled source, duplicate
catalog-block cover images) with 23 fully bundled HyperFrames templates
imported from nexu-io/html-video, so both the in-app Plugins home and the
marketing site's /plugins/templates/hyperframes/ show real, renderable,
visually distinct templates with hover-autoplay motion previews.

Added (plugins/_official/video-templates/<slug>/):
- open-design.json — od.surface "hyperframes" (HyperFrames artifact type),
  en + zh-CN title/description, inputs, and jsDelivr-hosted preview assets.
- template.json — client card metadata.
- SKILL.md — how to repaint and render the composition.
- source/ — the HTML+CSS+GSAP (or Remotion) composition, verbatim.
- preview.mp4 — a looping motion preview rendered with the html-video
  HyperFrames renderer, trimmed to the full animation length (cards
  hover-autoplay from frame 0, detail page plays it); each under the 1 MiB
  blob limit. 21 of 23 ship a video; frame-logo-outro (a held logo) and
  frame-data-rollup (Remotion, blank native render) ship a still poster.
- preview.png — poster frame extracted from that render.

Landing-page tweaks:
- Hide the two cover-less examples/{hyperframes,video-hyperframes} onboarding
  scenarios from the public template library (feature demos, not templates).
- Point the "use this" CTAs (template card + plugin detail) at the desktop
  download page instead of the detail page / GitHub releases.
- Hover-autoplay restarts each preview from frame 0 so the full animation
  plays on every hover instead of resuming mid-loop.
- SEO: keyword-led <title> ("HyperFrames templates & skills …") and a
  rewritten, keyword-rich category description (all 18 locales) to target
  "hyperframes template" / "hyperframes skill" search intent.

Removed the 11 source-less hyperframes-* HeyGen catalog stubs. Licensing is
mirrored faithfully per upstream and summarised in HYPERFRAMES-ATTRIBUTIONS.md:
8 Apache-2.0 forks of heygen-com/hyperframes, 1 MIT from
nateherkai/hyperframes-student-kit, 7 original Apache-2.0, and 7 derived from
MIT design skills (frontend-slides, huashu-design) with studio inspiration
recorded as non-affiliated L1 origin.

Registry seed nets +12 entries (402 -> 414); bundledPreinstallCount updated.

* fix(plugins): self-contain hyperframes templates + narrow aspect options

Address review on the HyperFrames import:
- Narrow each fixed-layout (1920×1080) hyperframes manifest's
  od.inputs.aspect.options to the single aspect its template.json actually
  ships (e.g. frame-vignelli is 9:16, the rest 16:9), so the picker/agent
  can't request portrait/square renders the composition can't produce.
  frame-data-rollup (responsive Remotion, layout computed off canvas size)
  keeps 16:9/9:16/1:1.
- frame-kinetic-type: drop the external 9 MB S3 A-roll video from
  source/compositions/main-graphics.html. The timeline sets that layer to
  opacity:0 at t=0 and never reveals it, so it was never visible; replacing
  it with an empty self-contained layer keeps the render identical (verified)
  and removes the only third-party runtime media dependency. Re-rendered its
  preview from the vendored source.

* fix(plugins): vendor all runtime assets so hyperframes templates are self-contained

Make every bundled HyperFrames template render with no third-party network
dependency, per review and per each template's own SKILL.md "keep the
composition self-contained under source/" contract:

- GSAP: vendor gsap@3.14.2 into each template's source/ and rewrite the
  jsDelivr <script src> to a relative path (9 templates).
- Google Fonts: fetch each family's woff2, ship them under source/fonts/,
  inline a local @font-face fonts.css, and drop the googleapis <link>/@import
  (20 templates). CJK families (Noto Sans/Serif SC) are intentionally not
  vendored — they exceed the 1 MiB blob limit; their placeholder sample text
  falls back to the OS CJK font, keeping the source dependency-free.
- Tailwind: replace the cdn.tailwindcss.com JIT script with a static
  tailwind.css built from the classes each template actually uses (6).
- Textures/media: vendor the remaining external texture (warm-grain) and copy
  the previously-missing local assets/ (screenshots, audio, swiss-grid.svg)
  into frame-product-promo, frame-product-promo-30s, frame-swiss-grid.
- od.context.assets now stages ./template.json + ./source so the renderer
  materializes the full bundle.

All vendored files are under the 1 MiB blob limit. Re-rendered the six
templates whose output could shift (Tailwind static build + CJK fallback);
verified renders are visually intact. Final audit: zero external CDN/http
asset references across all 23 template sources.

* fix(plugins): inline vendored GSAP + enrich plugin detail SEO

- Inline the vendored GSAP runtime directly into each template's index.html
  instead of shipping gsap.min.js, so no new committed `.js` files trip the
  repository-layout guard (`scripts/guard.ts` residual-JS policy). Compositions
  use the global `gsap` the inlined runtime defines. Templates stay fully
  self-contained; re-rendered frame-kinetic-type / frame-swiss-grid to confirm
  motion is intact.
- Plugin detail pages now lead their <title> and meta description with the
  artifact type + brand keywords — "<HyperFrames video template> · Open Design"
  and "... for Open Design — the open-source Claude Design alternative" — so
  each detail page ranks for "hyperframes template", "Open Design", and
  "open source Claude Design alternative".

* fix(plugins): replace placeholder screenshots in frame-product-promo-30s

The product-surfaces scene referenced source/assets/screenshot-{1,2,3}.png,
which were 67-byte 1×1 placeholder PNGs carried over from the upstream
template, so a render of that scene showed blank laptop screens. Replace them
with three self-contained 1440×900 dashboard mockups (distinct Plan/Build/
Monitor accents) so the bundled source renders usable product surfaces, and
re-render the preview. All three are well under the 1 MiB blob limit.

* fix(plugins): give frame-logo-outro a motion preview like the rest

frame-logo-outro shipped as an image-only preview, so it was the one new
HyperFrames template without hover-autoplay / detail playback. Re-render it
from its (now self-contained) source as a short looping logo-reveal MP4 and
switch its manifest to previewType "video", matching the other 22. 72 KB,
under the 1 MiB blob limit. (frame-data-rollup remains a still poster — its
Remotion native render comes out blank; tracked as a follow-up.)

* fix(landing): keep plugin detail lead localized, SEO suffix meta-only

The keyword-rich English SEO suffix was appended to `description`, which is
both the <meta description> and the visible <p class="lead">, so non-English
plugin detail pages rendered mixed-language body copy. Split it: `description`
stays the fully-localized lead, and a separate `seoDescription` carries the
English brand/keyword suffix for <Layout description> + JSON-LD only.

---------

Co-authored-by: Joey <276262049+xne998808-ai@users.noreply.github.com>
2026-06-11 09:17:17 +00:00
28f5516697 feat(prompt-templates): add desk hologram AR realdesk Seedance 2.0 video template (#3967)
* feat(prompt-templates): add desk hologram AR realdesk Seedance 2.0 video template

Ship the two-phase keyframe + i2v workflow behind blue-warrior-realdesk-t2v-15s
as a first-party video prompt template with preview MP4/poster and plugin bundle.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(prompt-templates): host desk-hologram previews on repo-assets CDN

Drop the 8.9 MB tracked MP4 to satisfy the 1 MiB blob guard and point
previewImageUrl/previewVideoUrl at repo-assets.open-design.ai, matching
the Three Kingdoms Seedance templates. Bump bundledPreinstallCount to 402.

Co-authored-by: Cursor <cursoragent@cursor.com>

* ci: add workflow to publish prompt-template previews to repo-assets R2

Maintainer workflow_dispatch helper for template PRs that drop large MP4s
from git and point preview URLs at repo-assets.open-design.ai.

Co-authored-by: Cursor <cursoragent@cursor.com>

* ci: auto-publish desk-hologram template previews on workflow push

Run the repository-assets upload when this workflow lands on the
template branch so PR #3967 preview URLs go live without waiting for main.

Co-authored-by: Cursor <cursoragent@cursor.com>

* ci: keep repository-template asset publish as workflow_dispatch only

Assets for PR #3967 are live on repo-assets; drop the one-shot branch push
trigger now that the upload succeeded.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(plugins): add specVersion to desk-hologram video template manifest

Align open-design.json with the official video-template plugin schema.

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Tuola Ge <gexingli@refly.ai>
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-09 12:16:49 +00:00
d065b50c4c feat(plugins): add Hallmark community skill (#3479)
Co-authored-by: tuolaji <tuola@tuolajideMacBook-Air.local>
2026-06-02 07:49:33 +00:00
lefarcen c14baf07d3 Merge origin/main into release/v0.8.0
PR #2461 sync prep — resolves 14 conflicts merging 84 main-side commits
on top of 58 release-side commits accumulated during the 0.8.0 cycle.

Resolution summary:

Take main (theirs) where main carried deliberate forward progress:
- apps/web/src/components/PluginCard.tsx — 7 hunks, i18n migration:
  hardcoded English aria-labels/titles replaced with t() calls keyed
  on pluginCard.* (all 8 keys verified present in en.ts).
- apps/web/src/components/TasksView.tsx — 1 hunk, source-ingestion
  feature: sortedRoutines (newest-first), sourceIngestionTemplates,
  patchSourceForm, submitSourceIngestion. activeCount/pausedCount
  semantics preserved (now keyed on sortedRoutines, count unchanged).
- e2e/ui/app.test.ts — new node:fs/promises + tmpdir + path + @/timeouts
  imports needed by main-side test helpers.
- e2e/ui/settings-local-cli-codex-fallback.test.ts — menu-dismissal
  helper block added by main.

Keep both sides where each added a different field to the same object
literal:
- apps/web/src/components/ProjectView.tsx (locale + analyticsHints
  spread).
- apps/web/src/components/DesignSystemFlow.tsx (locale + analyticsHints).

Take release (ours) where release carried deliberate work that ships
0.8.0:
- CHANGELOG.md — release-side 0.8.0 entry + PR link refs; main's
  Unreleased section was the same body of work, now finalized.
- apps/landing-page/public/{apple-touch-icon,favicon}.png +
  apps/web/public/app-icon.svg — release-side visual refresh assets
  consistent with 0.8.0 stable ship.
- tools/pack/src/linux.ts — packageVersion const required by line 466;
  taking main's empty line would build-error.
- e2e/ui/project-management-flows.test.ts +
  e2e/ui/settings-api-protocol.test.ts +
  e2e/ui/settings-memory-routines.test.ts — release-side release-smoke
  hardening (shangxinyu1 + PerishFire) takes precedence on overlap.

Closes-issue / unblocks: PR #2461 sync release/v0.8.0 → main.
2026-05-23 12:17:18 +08:00
Marc ChanandGitHub a5b47c5f76 fix(ci): narrow workflow scope and reuse setup steps (#2708)
* fix(ci): narrow workflow scope and reuse setup steps

* fix(ci): narrow workflow scope and reuse setup steps

Repair Nix fixed-output hashes for the filtered daemon and web source trees.

Generated-By: looper 0.0.0-dev (runner=fixer, agent=opencode)

* fix(ci): narrow workflow scope and reuse setup steps

Generated-By: looper 0.0.0-dev (runner=fixer, agent=opencode)

* fix(ci): narrow workflow scope and reuse setup steps

Generated-By: looper 0.0.0-dev (runner=fixer, agent=opencode)

* fix(ci): repair daemon and nix checks

Generated-By: looper 0.0.0-dev (runner=fixer, agent=opencode)
2026-05-22 18:58:53 +08:00
Siri-RayandGitHub e6da01e998 Add i18n metadata for official content (#2692) 2026-05-22 16:39:32 +08:00
0ba88a064d Add Codex interactive capability map example (#2657)
* Add Codex interactive capability map example

* Fix Codex map preview entry

---------

Co-authored-by: tuolaji <tuola@tuolajideMacBook-Air.local>
2026-05-22 15:49:16 +08:00
Tom HuangandGitHub 76defffb93 Garnet hemisphere (#1702)
* feat(chat-composer): enhance mention handling and input overlay

- Introduced a new overlay for inline mentions in the chat composer, improving user experience by visually indicating mentions as users type.
- Updated the `ChatComposer` component to manage mention entities and integrate them into the input field, allowing for better context and interaction.
- Enhanced the `AssistantMessage` component to support the display of plugin action panels based on the current project context, facilitating easier plugin management.
- Refactored related components to ensure consistent handling of project files and mentions across the application.

This update significantly improves the chat interaction model, making it more intuitive for users to engage with mentions and plugins.

* feat(plugin-management): enhance plugin action panels and UI components

- Updated the `AssistantMessage` component to include plugin action panels based on the latest project context, improving user interaction with generated plugins.
- Refactored the `PluginsView` to support detailed views for available marketplace entries, allowing users to access more information and actions for each plugin.
- Introduced new CSS styles for improved visual representation of plugin-related UI elements, enhancing overall user experience.
- Enhanced the `listPlugins` function to include an option for fetching hidden plugins, providing more flexibility in plugin management.

This update significantly improves the usability and functionality of the plugin management system, making it easier for users to interact with and manage their plugins.

* fix(assistant-message): refine plugin folder candidate selection logic

- Updated the `pluginFoldersTouchedThisTurn` function to improve the logic for selecting plugin folder candidates based on touched paths and message content.
- Introduced a new helper function, `pathMatchesFolderFileBasename`, to enhance the matching criteria for folder candidates.
- Added a check for explicit folder matches before falling back to a single candidate, improving accuracy in folder selection.
- Modified the `shouldRenderSlotAsText` function in `HomeHero` to include the name parameter, refining the rendering logic for slot text.

These changes enhance the functionality and reliability of the assistant message component in managing plugin folder candidates.

* feat(plugin-folder-actions): implement agent-routed CLI actions for plugin management

- Introduced a new `PluginFolderAgentAction` type to streamline actions related to plugin folders, including install, publish, and contribute.
- Updated the `DesignFilesPanel`, `FileWorkspace`, and `AssistantMessage` components to utilize the new agent action handling, improving user interaction with generated plugins.
- Refactored the action handling logic to send commands to the agent, enhancing the workflow for managing plugin folders.
- Added corresponding tests to ensure the new functionality works as expected and integrates seamlessly with existing components.

This update significantly enhances the plugin management experience by routing actions through the agent, allowing for a more cohesive and interactive user experience.

* Fix PR 1702 CI blockers

* Fix PR 1702 remaining CI checks

* Prebuild AGUI adapter after install

* Restore plugin project snapshot wiring

* feat(marketplace): refactor marketplace URL handling and enhance fetching logic

- Introduced new functions to normalize marketplace URLs and manage fetching of marketplace manifests, improving the reliability of marketplace integrations.
- Updated the server and plugin logic to utilize the new fetching mechanisms, ensuring consistent handling of marketplace data.
- Enhanced tests to cover new URL normalization and fetching scenarios, ensuring robustness in marketplace management.

This update significantly improves the marketplace experience by streamlining URL handling and enhancing data fetching capabilities.

* Fix project auto-send cleanup spec
2026-05-14 21:12:50 +08:00
pftom 9ea33e076b feat(context-plugins): add support for context plugins in project metadata and UI
- Introduced a new `contextPlugins` field in the `ProjectMetadata` type to accommodate plugins selected via `@` mentions, allowing for additive context in project creation.
- Updated the `HomeHero` and `EntryShell` components to handle and display context plugins, enhancing user interaction with selected plugins.
- Implemented rendering logic for context plugins in the metadata block, providing clear visibility of selected plugins and their descriptions.
- Enhanced the UI to support the removal of context plugins and display additional details on hover, improving the overall user experience.

This update significantly enriches the project creation process by allowing users to incorporate multiple context plugins seamlessly.
2026-05-14 15:29:49 +08:00
pftom 3b167b6921 feat(plugins): add registry protocol and enhance plugin management features
- Introduced the `@open-design/registry-protocol` package, enabling improved interactions with plugin registries.
- Updated the `typecheck` script in the daemon's `package.json` to include the new registry protocol.
- Enhanced the CLI with new flags and commands for better plugin management, including `yank` and additional marketplace functionalities.
- Implemented a plugin lockfile system to manage installed plugins and their versions, improving reliability during upgrades.
- Added new marketplace doctor functionality to validate plugin entries and ensure compliance with registry standards.

This update significantly enhances the plugin ecosystem by providing robust registry interactions and improved management capabilities.
2026-05-14 08:55:36 +08:00