Token导航 LogoToken导航TokenDH.com
前端设计需要联网github未标认证来源可访问许可证需确认审计通过

svelte5-developmentsvelte5 开发

Agent Skill

用于辅助前端页面、组件、样式和交互逻辑的开发与维护。它适合让 Agent 生成或审查 React、Next.js、Vue、Tailwind、CSS 等相关代码,整理组件结构,或定位布局和性能问题。使用时需要结合项目现有设计系统、路由和构建方式,避免只生成孤立片段;涉及页面改动时,应配合本地预览和构建检查确认视觉效果。

总安装

1,787

周安装

73

GitHub Stars

4

下载量

572
CodexClaudeCursorGemini CLI

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

GitHub

来源数

2

许可证

unknown

最后核验

2026-05-01

来源状态

来源可访问

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:svelte5-development(svelte5 开发)
来源仓库:https://github.com/autumnsgrove/groveengine
仓库路径:skills/svelte5-development
安装命令:
npx skills add https://github.com/autumnsgrove/groveengine --skill svelte5-development
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 npx skills 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

skills.shnpx skills
npx skills add https://github.com/autumnsgrove/groveengine --skill svelte5-development

简介

专注于 Svelte 5 项目开发的全流程辅助,涵盖组件、样式与工程化配置。

  • 适合在 Codex、Claude、Cursor、Gemini CLI 中生成基于 Svelte 5 的现代前端应用代码。
  • 通过 GitHub 仓库安装,提供项目脚手架、依赖管理和构建脚本参考。
  • 需结合现有设计系统与路由结构使用,避免脱离上下文生成无效片段。
  • 建议确认仓库是否包含对 Vite、Rollup 等主流构建工具的集成示例。

SKILL.md

Svelte 5 Development Skill

When to Activate

Activate this skill when:

  • Creating Svelte 5 components
  • Working with SvelteKit routing
  • Implementing runes ($state, $derived, $effect)
  • Building forms with actions
  • Setting up SvelteKit projects

Quick Commands

npx sv create my-app      # Create SvelteKit project
cd my-app && pnpm install
pnpm dev               # Start dev server (localhost:5173)
pnpm build             # Build for production

Runes Quick Reference

RunePurposeExample
$stateReactive statelet count = $state(0)
$derivedComputed valueslet doubled = $derived(count * 2)
$effectSide effects$effect(() => console.log(count))
$propsComponent propslet {name} = $props()
$bindableTwo-way bindinglet {value = $bindable()} = $props()

Reactive State ($state)

<script>
	let count = $state(0);
	let user = $state({ name: "Alice", age: 30 });
	let items = $state(["apple", "banana"]);
</script>

<button onclick={() => count++}>
	Clicked {count} times
</button>

<button onclick={() => user.age++}>
	{user.name} is {user.age}
</button>

Deep reactivity: Objects and arrays update automatically on mutation.

Computed Values ($derived)

<script>
	let count = $state(0);
	let doubled = $derived(count * 2);

	// For complex computations
	let summary = $derived.by(() => {
		const total = items.length;
		const done = items.filter((i) => i.done).length;
		return `${done}/${total}`;
	});
</script>

Side Effects ($effect)

<script>
	let count = $state(0);

	$effect(() => {
		console.log(`Count is ${count}`);
		document.title = `Count: ${count}`;

		// Cleanup function
		return () => {
			console.log("Cleanup");
		};
	});
</script>

Component Props ($props)

<!-- Button.svelte -->
<script>
	let { label, disabled = false, onclick } = $props();
</script>

<button {disabled} {onclick}>{label}</button>

TypeScript Props

<script lang="ts">
	interface Props {
		label: string;
		disabled?: boolean;
		onclick?: () => void;
	}

	let { label, disabled = false, onclick }: Props = $props();
</script>

SvelteKit File Conventions

FilePurpose
+page.sveltePage component
+page.server.jsServer-only load/actions
+layout.svelteShared layout
+server.jsAPI endpoints
+error.svelteError boundary

Data Loading

// src/routes/posts/+page.server.js
export async function load({ fetch }) {
	const response = await fetch("/api/posts");
	return { posts: await response.json() };
}
<!-- src/routes/posts/+page.svelte -->
<script>
	let { data } = $props();
</script>

{#each data.posts as post}
	<article>
		<h2>{post.title}</h2>
	</article>
{/each}

Form Actions

Type-Safe Form Validation (Rootwork Pattern)

Use parseFormData() for type-safe form handling at trust boundaries:

// src/routes/login/+page.server.ts
import { fail, redirect } from "@sveltejs/kit";
import { parseFormData } from "@autumnsgrove/lattice/server";
import { z } from "zod";

const LoginSchema = z.object({
	email: z.string().email("Valid email required"),
	password: z.string().min(8, "Password must be at least 8 characters"),
});

export const actions = {
	default: async ({ request, cookies }) => {
		const formData = await request.formData();
		const result = parseFormData(formData, LoginSchema);

		if (!result.success) {
			const firstError = Object.values(result.errors).flat()[0];
			return fail(400, { error: firstError || "Invalid input" });
		}

		const { email, password } = result.data;

		// Authenticate with validated, typed data
		const token = await authenticate(email, password);
		if (!token) {
			return fail(401, { error: "Invalid credentials" });
		}

		cookies.set("session", token, { path: "/" });
		throw redirect(303, "/dashboard");
	},
};

Benefits:

  • Type-safe: result.data is fully typed as LoginSchema
  • Structured errors: result.errors is a map of field → messages
  • No as casts at trust boundaries
<!-- +page.svelte -->
<script>
	import { enhance } from "$app/forms";
	let { form } = $props();
</script>

<form method="POST" use:enhance>
	<input name="email" value={form?.email ?? ""} />
	{#if form?.missing}
		<p class="error">Email required</p>
	{/if}
	<button>Submit</button>
</form>

API Routes

// src/routes/api/posts/+server.js
import { json } from "@sveltejs/kit";

export async function GET({ url }) {
	const posts = await getPosts();
	return json(posts);
}

export async function POST({ request }) {
	const data = await request.json();
	const post = await createPost(data);
	return json(post, { status: 201 });
}

Common Pitfalls

Destructuring Breaks Reactivity

// ❌ Bad
let { count } = $state({ count: 0 });

// ✅ Good
let state = $state({ count: 0 });
state.count++;

Missing Keys in Each

<!-- ❌ Bad -->
{#each items as item}

<!-- ✅ Good -->
{#each items as item (item.id)}

Use Progressive Enhancement

<script>
  import { enhance } from '$app/forms';
</script>

<form method="POST" use:enhance>

Error Feedback (Signpost + Toast)

Toast is the primary client-side feedback for user actions:

import { toast } from "@autumnsgrove/lattice/ui";

// After successful action
toast.success("Post published!");

// After failed action
toast.error(err instanceof Error ? err.message : "Something went wrong");

// Async operations
toast.promise(apiRequest("/api/export", { method: "POST" }), {
	loading: "Exporting...",
	success: "Done!",
	error: "Export failed.",
});

// Multi-step flows
const id = toast.loading("Saving...");
// ... later
toast.dismiss(id);
toast.success("Saved!");

When NOT to use toast: form validation (use fail() + inline errors), page load failures (+error.svelte), persistent notices (use GroveMessages).

Server-side errors use Signpost codes:

import {
	API_ERRORS,
	buildErrorJson,
	throwGroveError,
	logGroveError,
} from "@autumnsgrove/lattice/errors";

// API route: return structured error
return json(buildErrorJson(API_ERRORS.RESOURCE_NOT_FOUND), { status: 404 });

// Page load: throw to +error.svelte
throwGroveError(404, SITE_ERRORS.PAGE_NOT_FOUND, "Engine");

Type-Safe Error Handling (Rootwork Guards)

Use isRedirect() and isHttpError() to safely handle caught exceptions in form actions:

import { isRedirect, isHttpError } from "@autumnsgrove/lattice/server";
import { fail } from "@sveltejs/kit";

export const actions = {
	default: async ({ request }) => {
		try {
			const formData = await request.formData();
			const result = parseFormData(formData, MySchema);

			if (!result.success) {
				return fail(400, { error: "Validation failed" });
			}

			// Process data
			const response = await processData(result.data);
			throw redirect(303, "/success");
		} catch (err) {
			// Redirects and HTTP errors must be re-thrown
			if (isRedirect(err)) throw err;
			if (isHttpError(err)) return fail(err.status, { error: err.body.message });

			// Unexpected errors
			console.error("Unexpected error:", err);
			return fail(500, { error: "Something went wrong" });
		}
	},
};

See AgentUsage/error_handling.md and AgentUsage/rootwork_type_safety.md for the full reference.

Project Structure

src/
├── lib/
│   ├── components/
│   └── server/
├── routes/
│   ├── +layout.svelte
│   ├── +page.svelte
│   └── api/
├── app.html
└── hooks.server.js

Grove-Specific: GroveTerm Components

When building Grove UI that includes nature-themed terminology, always use the GroveTerm component suite instead of hardcoding terms. This respects users' Grove Mode setting (standard terms by default, opt-in to Grove vocabulary).

<script lang="ts">
	import { GroveTerm, GroveSwap, GroveText } from "@autumnsgrove/lattice/ui";
	import groveTermManifest from "$lib/data/grove-term-manifest.json";
</script>

<!-- Interactive term with popup definition -->
<GroveTerm term="bloom" manifest={groveTermManifest} />

<!-- Silent swap (no popup, no underline) -->
<GroveSwap term="arbor" manifest={groveTermManifest} />

<!-- Parse [[term]] syntax in data strings -->
<GroveText
	content="Your [[bloom|posts]] live in your [[garden|blog]]."
	manifest={groveTermManifest}
/>

See libs/engine/src/lib/ui/components/ui/groveterm/ for component source and chameleon-adapt skill for full UI design guidance.

Related Resources

See AgentUsage/svelte5_guide.md for complete documentation including:

  • Advanced rune patterns
  • Snippets for reusable markup
  • Performance optimization
  • TypeScript integration

适合场景

01

用户想查找某类 Agent Skill 时

02

需要根据任务场景推荐可安装能力包时

03

需要对比不同来源的安装命令和来源信息时

能力概览

能力 1

按任务关键词查找相关 Skills

能力 2

展示可复制的安装命令

能力 3

保留来源站点、仓库和原始说明,方便继续核验

能力 4

展示第三方安全扫描或审计结果

安装后应在对应宿主中按原始 README 的触发条件使用;具体调用方式请以来源页面和 README 为准。

平台分布

Codex

38.05%
按下载量换算218

Claude

27.96%
按下载量换算160

Cursor

17.22%
按下载量换算98

Gemini CLI

10.3%
按下载量换算59

安全审计

Gen Agent Trust Hub

通过

Socket

通过

Snyk

通过

权限和风险

需要联网

该 Skill 可能需要联网访问来源站点、仓库或外部 API;具体网络访问范围需要结合源码和 README 复核。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。当前只有一个来源,正式发布前建议补源仓库或其他目录站核验。

来源信息

继续浏览同类 Skills