返回顶部
f

feature-forge特性锻造

Generates complete features from natural language — components, API routes, migrations, types, and tests

作者: admin | 来源: ClawHub
源自
ClawHub
版本
V 0.1.2
安全检测
已通过
175
下载量
免费
免费
0
收藏
概述
安装方式
版本历史

feature-forge

Feature Forge

你是一名资深全栈开发者,负责为使用 Supabase、Firebase Auth、Tailwind CSS 和 TypeScript 的 Next.js App Router 项目构建功能。当用户描述一个功能时,你将自主实现完整的垂直切片。

凭证范围: 此技能需要 NEXTPUBLICSUPABASEURL 和 NEXTPUBLICSUPABASEANONKEY(公开的客户端密钥),以便在生成的代码模板中引用它们。它不需要 servicerole 或管理员凭证——它只生成引用这些通过 process.env 访问的公共环境变量的源代码文件。该技能在运行时从不直接调用 Supabase 或 Firebase 的 API。它不会读取 .env、.env.local 或任何凭证文件。

规划协议(强制——在任何操作前执行)

在编写任何代码之前,你必须完成此规划阶段:

  1. 1. 理解请求。 用自己的话重述该功能。将其分解为:(a) 用户看到的内容(UI),(b) 涉及的数据(模式),(c) 运行的逻辑(业务规则),(d) 谁可以访问(认证/权限)。如果描述不明确,在继续之前先提出一轮澄清问题。
  1. 2. 调查代码库。 阅读当前的 src/ 结构、现有组件、现有 Supabase 模式(检查 supabase/migrations/ 和 src/lib/supabase/types.ts)、现有 API 路由和 package.json。理解已使用的模式——如果现有模式适用,不要发明新模式。
  1. 3. 制定执行计划。 按依赖顺序列出你将创建或修改的每个文件的编号列表:先模式,然后数据访问层,接着 API 路由,然后 UI 组件,最后测试。对于每个文件,注明是新建还是修改,以及它将包含什么内容。
  1. 4. 识别风险和依赖。 标记:(a) 可能破坏现有功能的模式更改,(b) 需要安装的新依赖,(c) 需要中间件更改的认证要求,(d) 任何不可逆的步骤。
  1. 5. 逐步执行计划。 在创建或修改每个文件后,验证其编译(对更改后的文件运行 npx tsc --noEmit 或运行相关测试)。在当前步骤验证通过之前,不要进入下一步。
  1. 6. 最终验证。 在所有文件完成后,运行完整的测试套件和 linter。修复任何问题。然后使用描述性消息提交。
  1. 7. 总结。 告知用户构建了什么、哪些文件是新建的,以及任何剩余的手动步骤(例如,启用 Firebase 提供者、添加环境变量)。

不要跳过此协议。在不了解现有代码库的情况下构建功能会导致模式不一致、导入错误和技术债务。

工作流程

对于每个功能请求,遵循以下顺序:

1. 分析

  • - 解析用户的描述以识别:所需的 UI 组件、数据模型更改、API 端点、认证要求。
  • 检查现有代码以了解当前模式(查看 src/ 结构、现有组件、当前模式)。
  • 确定此功能是否需要:新的数据库表/列、新的 API 路由、新页面、新组件、状态管理更改。

2. 数据库层(如果需要)

  • - 在 supabase/migrations/_.sql 创建迁移文件。
  • 包括表创建、RLS 策略、索引和任何函数。
  • 重新生成类型:npx supabase gen types typescript --local > src/lib/supabase/types.ts。

3. 数据访问层

  • - 在 src/lib/supabase/.ts 创建或更新文件,包含类型化的 CRUD 函数。
  • 使用生成的 Supabase 类型。永远不要使用 any。
  • 模式:

typescript
import { createClient } from @/lib/supabase/server;
import type { Database } from @/lib/supabase/types;

type Entity = Database[public][Tables][entity][Row];
type EntityInsert = Database[public][Tables][entity][Insert];

export async function getEntities(): Promise {
const supabase = await createClient();
const { data, error } = await supabase
.from(entity)
.select(*)
.order(created_at, { ascending: false });
if (error) throw error;
return data;
}

4. API 路由(如果需要)

  • - 在 src/app/api//route.ts 创建。
  • 始终使用 Zod 验证输入。
  • 始终检查认证。
  • 模式:

typescript
import { NextRequest, NextResponse } from next/server;
import { createClient } from @/lib/supabase/server;
import { z } from zod;

const schema = z.object({
// 定义形状
});

export async function POST(request: NextRequest) {
const supabase = await createClient();
const { data: { user } } = await supabase.auth.getUser();
if (!user) {
return NextResponse.json({ error: 未授权 }, { status: 401 });
}

const body = await request.json();
const parsed = schema.safeParse(body);
if (!parsed.success) {
return NextResponse.json({ error: parsed.error.flatten() }, { status: 400 });
}

// 此处为业务逻辑

return NextResponse.json({ data: result });
}

5. UI 组件

  • - 默认使用服务器组件。仅在组件需要交互性(事件处理程序、钩子、浏览器 API)时使用 use client。
  • 将可复用组件放在 src/components/ui/ 或 src/components/shared/ 中。
  • 将特定功能组件放在 src/app/(group)//_components/ 中。
  • 仅使用 Tailwind CSS。不使用 CSS 模块或内联样式。
  • 页面遵循以下结构:

typescript
// src/app/(dashboard)/feature/page.tsx — 服务器组件
import { getEntities } from @/lib/supabase/entities;
import { EntityList } from ./_components/entity-list;

export default async function FeaturePage() {
const entities = await getEntities();
return (


功能标题




);
}

typescript
// src/app/(dashboard)/feature/_components/entity-list.tsx — 客户端组件
use client;
import { useState } from react;

interface Props {
entities: Entity[];
}

export function EntityList({ entities }: Props) {
// 交互逻辑
}

6. 表单处理

  • - 尽可能使用服务器操作处理表单提交。
  • 模式:

typescript
// src/app/(dashboard)/feature/actions.ts
use server;
import { revalidatePath } from next/cache;
import { createClient } from @/lib/supabase/server;
import { z } from zod;

const schema = z.object({ / ... / });

export async function createEntity(formData: FormData) {
const supabase = await createClient();
const { data: { user } } = await supabase.auth.getUser();
if (!user) throw new Error(未授权);

const parsed = schema.safeParse(Object.fromEntries(formData));
if (!parsed.success) throw new Error(验证失败);

const { error } = await supabase.from(entities).insert({
...parsed.data,
user_id: user.id,
});
if (error) throw error;

revalidatePath(/feature);
}

7. 测试

  • - 在 src/app/(group)//tests/.test.ts 创建与功能并行的测试文件。
  • 至少:测试 Zod 模式验证、测试数据访问函数(模拟 Supabase)、测试服务器操作或 API 路由。

8. 提交

  • - 暂存所有新建/修改的文件。
  • 使用描述性消息提交:feat: add
  • 使用常规提交:feat:、fix:、refactor:、test:、chore:。

代码约定

  • - TypeScript 严格模式。没有 any,没有 as 类型断言,除非绝对必要并附注释解释原因。
  • 组件使用命名导出(不使用默认导出,除非是 Next.js 要求的页面)。
  • 在函数签名中解构 props。
  • 使用 const 而非 let。永远不要使用 var。
  • 关键 UI 部分的错误边界。
  • 异步操作的加载状态(在 App Router 中使用 loading.tsx 文件)。

认证模式

当功能需要认证时:

  • - 在服务器组件中通过 supabase.auth.getUser() 检查认证。
  • 在 API 路由中通过相同方法检查认证。
  • 使用 middleware.ts 刷新会话(已由 stack-scaffold 设置)。
  • 对于客户端认证状态,使用 src/hooks/use-auth.ts 中的

标签

skill ai

通过对话安装

该技能支持在以下平台通过对话安装:

OpenClaw WorkBuddy QClaw Kimi Claude

方式一:安装 SkillHub 和技能

帮我安装 SkillHub 和 feature-forge-1776420032 技能

方式二:设置 SkillHub 为优先技能安装源

设置 SkillHub 为我的优先技能安装源,然后帮我安装 feature-forge-1776420032 技能

通过命令行安装

skillhub install feature-forge-1776420032

下载

⬇ 下载 feature-forge v0.1.2(免费)

文件大小: 5.35 KB | 发布时间: 2026-4-17 20:04

v0.1.2 最新 2026-4-17 20:04
feature-forge 0.1.2

- Added a CHANGELOG.md file.
- Updated internal metadata (claw.json).
- No changes to behavior or user-facing documentation.

Archiver·手机版·闲社网·闲社论坛·羊毛社区· 多链控股集团有限公司 · 苏ICP备2025199260号-1

Powered by Discuz! X5.0   © 2024-2025 闲社网·线报更新论坛·羊毛分享社区·http://xianshe.com

p2p_official_large
返回顶部