Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
34 changes: 17 additions & 17 deletions .cursor-plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
},
"metadata": {
"description": "Professional Cursor plugins with APEX workflow, SOLID principles, and expert development agents for Next.js, Laravel, Swift, Tailwind CSS, and more",
"version": "0.1.1"
"version": "0.1.4"
},
"plugins": [
{
Expand Down Expand Up @@ -58,7 +58,7 @@
"name": "fuse-astro",
"source": ".cursor-plugin/plugins/fuse-astro",
"description": "Expert Astro 6 with Islands Architecture, Content Layer, Actions, View Transitions, and multi-framework integration",
"version": "1.0.12",
"version": "1.0.13",
"author": {
"name": "Fusengine",
"email": "hello@fusengine.ch"
Expand All @@ -81,7 +81,7 @@
"name": "fuse-cartographer",
"source": ".cursor-plugin/plugins/fuse-cartographer",
"description": "Generates indented markdown maps of the plugin ecosystem for agent navigation",
"version": "1.0.11",
"version": "1.0.12",
"author": {
"name": "Fusengine",
"email": "hello@fusengine.ch"
Expand Down Expand Up @@ -145,7 +145,7 @@
"name": "fuse-design",
"source": ".cursor-plugin/plugins/fuse-design",
"description": "Design Director for websites, web apps, iOS, and Android. Generates HTML/CSS directly (Gemini Design MCP, Magic/21st.dev, and shadcn MCP are optional). iOS/Android produce tokens + a device-framed mockup + a handoff spec, never SwiftUI/Compose. Design method, design system tokens, motion, UX copy, and a deterministic design-review gate. Anti-AI-Slop, WCAG 2.2.",
"version": "2.2.8",
"version": "2.2.9",
"author": {
"name": "Fusengine",
"email": "hello@fusengine.ch"
Expand Down Expand Up @@ -181,7 +181,7 @@
"name": "fuse-go",
"source": ".cursor-plugin/plugins/fuse-go",
"description": "Expert Go 1.26+ — idioms, concurrency, backend services, cargo-grade tooling (golangci-lint v2, govulncheck), with SOLID principles",
"version": "1.0.5",
"version": "1.0.6",
"author": {
"name": "Fusengine",
"email": "hello@fusengine.ch"
Expand All @@ -207,7 +207,7 @@
"name": "fuse-laravel",
"source": ".cursor-plugin/plugins/fuse-laravel",
"description": "Expert Laravel 13 + PHP 8.3+ with SOLID principles, first-class PHP Attributes, Laravel AI SDK, JSON:API Resources, native vector search (pgvector), Eloquent, Livewire, queues with routing, and comprehensive documentation",
"version": "1.2.6",
"version": "1.2.7",
"author": {
"name": "Fusengine",
"email": "hello@fusengine.ch"
Expand Down Expand Up @@ -247,7 +247,7 @@
"name": "fuse-nextjs",
"source": ".cursor-plugin/plugins/fuse-nextjs",
"description": "Expert Next.js 16 + React 19 with App Router, Server Components, Prisma 7, and Better Auth",
"version": "1.1.22",
"version": "1.1.23",
"author": {
"name": "Fusengine",
"email": "hello@fusengine.ch"
Expand All @@ -269,7 +269,7 @@
"name": "fuse-php",
"source": ".cursor-plugin/plugins/fuse-php",
"description": "Expert modern PHP 8.5/8.4 for non-Laravel projects — libraries, standalone Symfony components, Slim, API-first apps, and CLI tools, with PER Coding Style 3.0, PHPStan, and SOLID principles",
"version": "1.0.5",
"version": "1.0.6",
"author": {
"name": "Fusengine",
"email": "hello@fusengine.ch"
Expand Down Expand Up @@ -322,7 +322,7 @@
"name": "fuse-react",
"source": ".cursor-plugin/plugins/fuse-react",
"description": "Expert React 19 with hooks, TanStack Router, Zustand, React Hook Form, Testing Library, shadcn/ui, and SOLID principles",
"version": "1.0.19",
"version": "1.0.20",
"author": {
"name": "Fusengine",
"email": "hello@fusengine.ch"
Expand Down Expand Up @@ -359,7 +359,7 @@
"name": "fuse-rust",
"source": ".cursor-plugin/plugins/fuse-rust",
"description": "Expert Rust 1.96+ (2024 edition) — ownership, error handling, async/tokio, axum backends, cargo tooling, with SOLID principles",
"version": "1.0.5",
"version": "1.0.6",
"author": {
"name": "Fusengine",
"email": "hello@fusengine.ch"
Expand Down Expand Up @@ -408,7 +408,7 @@
"name": "fuse-seo",
"source": ".cursor-plugin/plugins/fuse-seo",
"description": "SEO/GEO 2026 plugin. Local-first, framework-aware, zero third-party APIs. Covers technical SEO, schema markup, E-E-A-T, AI Overviews optimization, local SEO, sitemaps, hreflang, internal linking, content briefs, semantic clustering, and search experience optimization.",
"version": "1.0.10",
"version": "1.0.11",
"author": {
"name": "Fusengine"
},
Expand Down Expand Up @@ -438,7 +438,7 @@
"name": "fuse-shadcn-ui",
"source": ".cursor-plugin/plugins/fuse-shadcn-ui",
"description": "Expert shadcn/ui with Radix UI and Base UI detection, component patterns, registries, theming, and migration",
"version": "1.0.16",
"version": "1.0.17",
"author": {
"name": "Fusengine",
"email": "hello@fusengine.ch"
Expand All @@ -462,7 +462,7 @@
"name": "fuse-solid",
"source": ".cursor-plugin/plugins/fuse-solid",
"description": "SOLID principles enforcement with automatic project detection and validation for all languages",
"version": "1.0.17",
"version": "1.0.18",
"author": {
"name": "Fusengine",
"email": "hello@fusengine.ch"
Expand All @@ -483,7 +483,7 @@
"name": "fuse-swift-apple-expert",
"source": ".cursor-plugin/plugins/fuse-swift-apple-expert",
"description": "Expert Swift 6.2 + SwiftUI for iOS 26, macOS 26, iPadOS 26, watchOS 26, visionOS 26, tvOS 26 with Liquid Glass, @Observable, actors, SwiftData inheritance",
"version": "1.1.18",
"version": "1.1.19",
"author": {
"name": "Fusengine",
"email": "hello@fusengine.ch"
Expand All @@ -510,7 +510,7 @@
"name": "fuse-tailwindcss",
"source": ".cursor-plugin/plugins/fuse-tailwindcss",
"description": "Expert Tailwind CSS v4.1 - CSS-first configuration, @theme, @utility, @variant, Oxide engine 5x faster, OKLCH colors, container queries, 15 specialized skills",
"version": "1.1.9",
"version": "1.1.10",
"author": {
"name": "Fusengine",
"email": "hello@fusengine.ch"
Expand Down Expand Up @@ -542,7 +542,7 @@
"name": "fuse-tanstack-start",
"source": ".cursor-plugin/plugins/fuse-tanstack-start",
"description": "Expert TanStack Start (React, RC) full-stack framework with file-based routing, createServerFn server functions, selective SSR, and Nitro deployment",
"version": "1.0.4",
"version": "1.0.5",
"author": {
"name": "Fusengine",
"email": "hello@fusengine.ch"
Expand All @@ -567,7 +567,7 @@
"name": "fuse-typescript",
"source": ".cursor-plugin/plugins/fuse-typescript",
"description": "Expert TypeScript 6.0 for pure TS projects — CLI tools, libraries, scripts, and backends on Node 24 LTS or Bun 1.3, with SOLID principles",
"version": "1.0.5",
"version": "1.0.6",
"author": {
"name": "Fusengine",
"email": "hello@fusengine.ch"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "fuse-astro",
"version": "1.0.12",
"version": "1.0.13",
"description": "Expert Astro 6 with Islands Architecture, Content Layer, Actions, View Transitions, and multi-framework integration",
"author": {
"name": "Fusengine",
Expand Down
2 changes: 1 addition & 1 deletion .cursor-plugin/plugins/fuse-astro/agents/astro-expert.md
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@ This agent activates when ANY of the following are detected:
## Content Strategy

- **Static sites** — `output: 'static'` + Content Collections for blogs/docs
- **Hybrid sites** — `output: 'hybrid'` with `prerender = false` for dynamic pages
- **Hybrid sites** — `output: 'static'` + adapter, with `prerender = false` for dynamic pages (there is no `output: 'hybrid'`)
- **Full SSR** — `output: 'server'` + adapter for apps with auth/session

---
Expand Down
14 changes: 8 additions & 6 deletions .cursor-plugin/plugins/fuse-astro/skills/astro-7/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
name: astro-7
description: Use when building Astro 7 sites, choosing an output mode (static/server/hybrid), configuring middleware, or upgrading from Astro 5/6.
description: Use when building Astro 7 sites, choosing an output mode (static/server, hybrid via per-route prerender), configuring middleware, or upgrading from Astro 5/6.
versions:
astro: "7"
node: "22.12+"
Expand All @@ -11,7 +11,7 @@ related-skills: astro-content, astro-actions, astro-islands, astro-integrations,
---

<objective>
Configures and explains Astro 7 (stable, 7.0.9) core framework mechanics: file-based routing, the three output modes (static/server/hybrid) and per-route `prerender`, middleware for auth/redirects/headers, the Vite Environment API, the single Rust compiler (Go compiler removed, strict HTML parsing), stable Content Security Policy, Live Content Collections, and the built-in Fonts API.
Configures and explains Astro 7 (stable, 7.3.5) core framework mechanics: file-based routing, the two output modes (`static`/`server`) plus hybrid rendering via per-route `prerender`, middleware for auth/redirects/headers, the Vite Environment API, the single Rust compiler (Go compiler removed, strict HTML parsing), stable Content Security Policy, Live Content Collections, and the built-in Fonts API.

Covers initial project setup and migration from Astro 5/6, including breaking changes and Node 22.12+ requirements. Does not cover Content Layer API details (astro-content), Server Actions (astro-actions), Islands hydration directives (astro-islands), UI framework integrations (astro-integrations), or deployment adapters (astro-deployment) — those live in their own skills.
</objective>
Expand All @@ -38,7 +38,7 @@ After implementation, run **fuse-ai-pilot:sniper** for validation.

- Building new content-driven websites or blogs
- Migrating from Astro 6 to version 7
- Configuring static, server, or hybrid output modes
- Configuring static or server output (hybrid = per-route `prerender`)
- Setting up middleware for auth or redirects
- Leveraging the new Rust compiler for large sites
- Implementing Content Security Policy (CSP) headers
Expand All @@ -54,6 +54,8 @@ After implementation, run **fuse-ai-pilot:sniper** for validation.
| Built-in Fonts API (stable) | Zero-config font loading with performance optimization |
| CSP Support (stable) | Built-in Content Security Policy nonce management |
| Cloudflare Workers | First-class support with workerd runtime in dev |
| Route caching (stable in 7.0) | Top-level `cache` + `routeRules`, `Astro.cache.set({ maxAge, swr, tags })` |
| Advanced Routing (7.0) | Optional `src/fetch.ts` entrypoint (`astro/fetch`, `astro/hono`) |

---

Expand All @@ -65,7 +67,7 @@ After implementation, run **fuse-ai-pilot:sniper** for validation.
|------|-------------|----------|
| `static` (default) | All pages prerendered at build | Blogs, docs, marketing |
| `server` | All pages rendered on demand | Apps, dashboards, auth |
| `hybrid` | Mix static + on-demand | Most production sites |
| Hybrid (not an `output` value) | `static` or `server` + per-route `export const prerender` | Most production sites |

### Routing

Expand Down Expand Up @@ -94,8 +96,8 @@ After implementation, run **fuse-ai-pilot:sniper** for validation.
## Best Practices

1. **Use `output: 'static'` by default** — Add server only when needed
2. **Per-route `prerender`** — Fine-grained control in hybrid mode
2. **Per-route `prerender`** — Fine-grained hybrid control (`output` only accepts `'static' | 'server'`; there is no `'hybrid'` value)
3. **Middleware for cross-cutting concerns** — Auth, redirects, headers
4. **No compiler flag needed** — the Rust compiler is the only compiler now (Go removed); watch for strict HTML parsing errors on unclosed tags
5. **CSP nonces** — Use built-in stable support instead of custom headers
5. **CSP hashes** — Use built-in stable `security.csp` (hash-based, plus the `Astro.csp` runtime API) instead of custom headers
6. **Node 22.12+ required** — odd-numbered Node versions are unsupported; stay on stable TypeScript tooling, the native `tsgo` compiler can make `astro check`/typecheck fail opaquely (see installation.md)
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ keywords: config, defineConfig, integrations, vite, base, site, server
priority: high
---

# Astro 6 Configuration
# Astro 7 Configuration

## When to Use

Expand All @@ -23,7 +23,7 @@ import { defineConfig } from 'astro/config';
export default defineConfig({
site: 'https://example.com',
base: '/',
output: 'static', // 'static' | 'server' | 'hybrid'
output: 'static', // 'static' | 'server' (no 'hybrid' — use per-route prerender)
trailingSlash: 'ignore', // 'always' | 'never' | 'ignore'
compressHTML: 'jsx', // default in Astro 7 — JSX-style whitespace stripping
});
Expand All @@ -41,6 +41,10 @@ export default defineConfig({
| `adapter` | object | Server runtime adapter |
| `vite` | object | Vite config passthrough (Vite 8) |
| `srcDir` | string | Source directory (default: `./src`) |
| `session` | `object \| false` | Session driver config; `false` opts out entirely (7.2+) — runtime tree-shaken, adapters skip their default driver |
| `logger.entrypoint` | `URL \| string` | Custom logger module (option since 7.0; URL form 7.1+, relative string 7.2+) |
| `fetchFile` | `string \| null` | Advanced Routing entrypoint (default `src/fetch.ts`); `null` disables it |
| `cache` / `routeRules` | object | Stable route caching (7.0), e.g. `cache: { provider: memoryCache() }` |
| `publicDir` | string | Public assets (default: `./public`) |

## Removed Experimental Flags (Astro 7)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,24 +1,24 @@
---
name: installation
description: Astro 6 installation, upgrade from v5, Node requirements
when-to-use: new project, upgrading from Astro 5, setting up TypeScript
description: Astro 7 installation, upgrade from v5/v6, Node requirements
when-to-use: new project, upgrading from Astro 5/6, setting up TypeScript
keywords: setup, init, create, upgrade, node, requirements
priority: high
---

# Astro 6 Installation
# Astro 7 Installation

## When to Use

- Starting a new Astro 6 project
- Upgrading from Astro 4/5
- Configuring Node 22+ environment
- Starting a new Astro 7 project (latest stable: 7.3.5)
- Upgrading from Astro 5/6 (see the official v7 upgrade guide)
- Configuring Node 22.12+ environment

## Requirements

| Requirement | Version |
|-------------|---------|
| Node.js | 22.12+ (odd-numbered Node versions unsupported) |
| Node.js | 22.12+ (`engines.node >=22.12.0`; odd-numbered Node versions unsupported) |
| TypeScript | 5.1+ |

## TS7 / `tsgo` Warning
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
---
name: middleware
description: Astro 6 middleware — request/response interception, auth, redirects, locals
description: Astro 7 middleware — request/response interception, auth, redirects, locals
when-to-use: auth guards, redirects, request logging, setting locals
keywords: middleware, locals, auth, redirect, request, response
priority: medium
---

# Astro 6 Middleware
# Astro 7 Middleware

## When to Use

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ priority: medium

## When to Use

- Leveraging new Astro 6 stable features
- Leveraging Astro 6/7 stable features (7.1–7.3 additions at the end)
- Setting up font optimization
- Implementing Content Security Policy
- Using Live Content Collections for real-time data
Expand Down Expand Up @@ -40,28 +40,51 @@ export default defineConfig({

## Content Security Policy (stable)

CSP is stable since Astro 6.0 — `experimental.csp` no longer exists, configure it as a top-level option:
CSP is stable since Astro 6.0 — `experimental.csp` no longer exists, configure it under `security.csp`:

```typescript
export default defineConfig({
csp: true, // Generates nonces automatically
security: {
csp: true, // Hash-based: auto-hashes bundled scripts/styles (SHA-256 default)
},
});
```

## Live Content Collections

Fetch real-time external data through the content layer:
Fetch real-time external data at request time (adapter required). Live collections live in `src/live.config.ts` (not `content.config.ts`) and use `defineLiveCollection()`:

```typescript
// src/content.config.ts
import { defineCollection } from 'astro:content';
// src/live.config.ts
import { defineLiveCollection } from 'astro:content';
import { myLiveLoader } from './loaders/live';

const news = defineCollection({
const news = defineLiveCollection({
loader: myLiveLoader({ url: 'https://api.example.com/news' }),
});

export const collections = { news };
```

Query with `getLiveCollection()` / `getLiveEntry()`.

## Single Rust Compiler (Astro 7)

Astro 7 removed the Go compiler entirely — the Rust compiler is now the only `.astro` file compiler, no flag needed (`experimental.rustCompiler` no longer exists). It also enforces **strict HTML parsing**: unclosed tags and invalid HTML now raise a build error instead of being silently auto-corrected. Audit existing `.astro` templates for unclosed tags before upgrading.

## Astro 7.1 – 7.3 Additions

| Version | Feature | Usage |
|---------|---------|-------|
| 7.1 | Fine-grained CSP directives | `kind: 'element' \| 'attribute'` on CSP hashes/resources → `script-src-elem`, `script-src-attr`, `style-src-elem`, `style-src-attr` |
| 7.1 | Pagination URL control | `paginate(items, { pageSize, format: (url) => url + '.html' })` |
| 7.1 | Multiple dev servers | `astro dev --ignore-lock` (bypasses the dev lockfile) |
| 7.1 | Lower sync memory | `glob({ ..., deferRender: true })` renders entries on demand |
| 7.1 | Logger entrypoint as URL (option exists since 7.0) | `logger: { entrypoint: new URL('./src/custom-logger.js', import.meta.url) }` + `AstroRuntimeLogger` type |
| 7.2 | Opt out of sessions | `session: false` — session runtime removed from the SSR bundle |
| 7.2 | Background preview | `astro preview --background`, then `astro preview status \| logs \| stop` |
| 7.2 | Relative logger entrypoint | `logger: { entrypoint: './src/custom-logger.js' }` |
| 7.3 | Multiple preview servers | `astro preview --ignore-lock` |
| 7.3 | Logger in extension points | Custom image services (`transform(..., logger)`) and cache providers (`onRequest({ logger }, next)`) receive Astro's logger |

Experimental (opt-in, not stable): `experimental.collectionStorage: 'chunked'` (7.1) and `experimental.incrementalBuild` + per-path `cacheKey` in `getStaticPaths()` (7.2).
Loading
Loading