mirror of
https://github.com/nexu-io/open-design.git
synced 2026-10-27 09:51:12 +01:00
c5ae6292c464094de80d0191fab50144bff8a027
21
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
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) |
||
|
|
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. |
||
|
|
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> |
||
|
|
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> |
||
|
|
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> |
||
|
|
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> |
||
|
|
3a92f8a011 |
Add web effect extractor scenario (#4811)
Co-authored-by: tuolaji <tuola@tuolajideMacBook-Air.local> |
||
|
|
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> |
||
|
|
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> |
||
|
|
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>
|
||
|
|
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
|
||
|
|
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>
|
||
|
|
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> |
||
|
|
d065b50c4c |
feat(plugins): add Hallmark community skill (#3479)
Co-authored-by: tuolaji <tuola@tuolajideMacBook-Air.local> |
||
|
|
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. |
||
|
|
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) |
||
|
|
e6da01e998 | Add i18n metadata for official content (#2692) | ||
|
|
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> |
||
|
|
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 |
||
|
|
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. |
||
|
|
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. |