Skip to content

Commit ed1ff3e

Browse files
committed
feat: v6 pre-release
0 parents  commit ed1ff3e

790 files changed

Lines changed: 88886 additions & 0 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.agents/skills/design-taste-frontend/SKILL.md

Lines changed: 226 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
1+
---
2+
name: fa-feedback
3+
description: 当用户在使用 fa-* 系列技能(如 fa-framework-settings、fa-slot-creator、fa-form-builder、fa-route-generator、fa-store-generator、fa-page-optimizer、fa-theme-customizer 等)时,在同一个目标上经历了 3 次及以上的修改仍未达到预期效果,必须触发此技能。触发信号包括:用户反复要求调整同一处配置或代码、连续说"不对"/"再改改"/"还是不行"、对同一个功能点多次提出修正意见。即使用户没有明确表示"上报"或"反馈",只要检测到反复沟通修改的模式,就应主动触发。
4+
---
5+
6+
# Fantastic-admin 问题反馈
7+
8+
当用户在使用 fa-* 系列技能时遇到反复修改仍无法达到预期的情况,这通常意味着框架本身可能存在改进空间(比如 skill 指令不够精确、框架 API 不够直观、文档缺失等)。此时应主动询问用户是否愿意将问题反馈给框架作者。
9+
10+
## 触发条件
11+
12+
在当前对话中,如果满足以下任一条件,则触发此技能:
13+
14+
1. **同一目标的修改次数 >= 3 次**:用户针对同一个功能点或配置项,已经要求修改 3 次及以上
15+
2. **用户表达持续不满**:用户连续使用"不对"、"还是不行"、"再试试"、"跟我说的不一样"等表述
16+
3. **循环修改模式**:修改 A -> 改回 -> 再改 A,出现来回反复的情况
17+
18+
## 执行流程
19+
20+
### 第一步:分析问题
21+
22+
回顾当前对话历史,提炼以下信息:
23+
24+
1. **使用的技能**:用户在使用哪个 fa-* 技能
25+
2. **用户的原始需求**:用户最初想要实现什么
26+
3. **反复修改的焦点**:哪个具体的配置项/代码/功能点在被反复调整
27+
4. **未达预期的原因**:为什么始终无法满足用户的需求(是 skill 指令有误?框架 API 限制?还是理解偏差?)
28+
29+
### 第二步:询问用户
30+
31+
用以下方式询问用户(注意语气要友好自然,不要让用户感到被指责):
32+
33+
```
34+
我注意到在 [具体功能] 上我们已经来回调整了好几次,这很可能说明框架的 [skill/文档/API] 在这方面有改进空间。
35+
36+
你是否愿意将这个问题反馈给 Fantastic-admin 的作者?这有助于改进框架,让以后的使用体验更好。
37+
38+
如果你同意,我会帮你整理一份精简的问题描述,然后打开 GitHub Discussions 页面,内容会自动填好,你只需要检查一下就可以提交。
39+
```
40+
41+
- 如果用户**同意**,继续第三步
42+
- 如果用户**拒绝**,尊重用户的决定,继续协助解决当前问题,不再提及反馈
43+
44+
### 第三步:整理反馈内容
45+
46+
生成精简的反馈报告,格式如下:
47+
48+
**标题**(简洁明了,一句话概括问题):
49+
```
50+
[技能名称] 在 [场景] 下无法正确 [操作]
51+
```
52+
53+
**正文**(使用 Markdown 格式):
54+
```markdown
55+
## 问题描述
56+
57+
[一句话说明用户想做什么,以及遇到了什么问题]
58+
59+
## 使用的技能
60+
61+
[fa-xxx-xxx]
62+
63+
## 复现步骤
64+
65+
1. [用户的原始请求]
66+
2. [第一次修改及结果]
67+
3. [后续修改及结果]
68+
69+
## 期望行为
70+
71+
[用户期望的结果是什么]
72+
73+
## 实际行为
74+
75+
[实际发生了什么,为什么不符合预期]
76+
77+
## 可能的原因
78+
79+
[基于分析,推测问题可能出在哪里,比如 skill 指令、框架 API、默认配置等]
80+
```
81+
82+
内容整理原则:
83+
- **精简**:只保留关键信息,去掉对话中的冗余内容
84+
- **客观**:描述事实,不添加情绪化表达
85+
- **可操作**:让框架作者看到后能理解问题并采取行动
86+
87+
### 第四步:生成链接并打开
88+
89+
将整理好的标题和正文通过 URL 参数编码,拼接到 GitHub Discussions 链接中:
90+
91+
```
92+
https://github.com/orgs/fantastic-admin/discussions/new?category=通用&title={编码后的标题}&body={编码后的正文}
93+
```
94+
95+
使用以下方式生成并打开链接:
96+
97+
```bash
98+
# 生成 URL 编码的链接并打开
99+
python3 -c "
100+
import urllib.parse
101+
import subprocess
102+
103+
title = '''在此填入标题'''
104+
body = '''在此填入正文'''
105+
106+
params = urllib.parse.urlencode({
107+
'category': '通用',
108+
'title': title,
109+
'body': body
110+
}, quote_via=urllib.parse.quote)
111+
112+
url = f'https://github.com/orgs/fantastic-admin/discussions/new?{params}'
113+
print(f'链接已生成:{url}')
114+
subprocess.run(['open', url])
115+
"
116+
```
117+
118+
打开链接后,告诉用户:
119+
120+
```
121+
已在浏览器中打开 GitHub Discussions 页面。请检查预填的内容是否准确,确认无误后点击提交即可。
122+
123+
如果页面中的标题和内容没有自动填充(GitHub Discussions 可能不支持 URL 参数预填),你可以手动复制以下内容:
124+
125+
**标题**:[标题内容]
126+
127+
**内容**:
128+
[正文内容]
129+
```
130+
131+
始终同时展示原文内容作为备选方案,确保用户无论 URL 参数是否生效都能顺利提交反馈。
132+
133+
### 第五步:继续协助
134+
135+
反馈流程完成后,继续协助用户解决当前的问题,不要因为反馈流程中断用户的工作。
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
---
2+
name: fa-form-builder
3+
description: "为 Fantastic-admin 框架生成独立的表单页面,使用 vee-validate + zod 验证,全部使用框架内建 Fa* 组件。当用户说:'帮我做一个用户信息填写页'、'我只需要一个提交表单,不需要列表'、'做个设置页面,有几个输入框和保存按钮'、'生成一个注册/编辑/配置表单页'、'只要表单页,不需要增删改查',即使用户只是说'做个表单页面'也应触发此技能。"
4+
---
5+
6+
# 表单页面生成器
7+
8+
在 Fantastic-admin 框架中生成独立的 Router 表单页面,使用 vee-validate + zod 完成表单验证,全部使用框架内建 Fa* 组件,不引入任何 Element Plus 组件。
9+
10+
**生成的文件:**
11+
- `apps/<app>/src/views/{path}/{name}/index.vue` — 表单页面(含验证、提交骨架、固定操作栏)
12+
13+
---
14+
15+
## 第一步:确认工作区(必须阻塞等待用户回复)
16+
17+
本项目是 monorepo 架构,`apps/` 目录下存放各应用。**在执行任何文件读写操作之前**,必须先确认目标应用:
18+
19+
1. 执行 `ls apps/` 列出所有可用应用
20+
2. **立即向用户提问**,明确询问要在哪个应用中生成表单页面,并**停止等待回复**
21+
3. 收到用户明确回复后,才能继续后续步骤
22+
23+
> **严格规则**:如果用户没有在请求中明确说明目标应用(例如"在 example 应用中"、"apps/core"),则必须提问,不得自行猜测或默认选择任何应用。
24+
25+
确认后,后续所有文件路径均以该应用目录为根。
26+
27+
---
28+
29+
## 工作流程
30+
31+
### Step 1:收集基本信息
32+
33+
向用户询问(可合并为一次提问):
34+
35+
1. **模块名**(英文,用于文件路径,如 `user``profile``setting`
36+
2. **模块中文名**(用于页面标题,如 `用户信息``个人资料`
37+
3. **存放路径**(在 `apps/<app>/src/views/` 下的子目录,如 `system``account`,留空则直接放在 `src/views/` 下)
38+
39+
### Step 2:收集字段信息
40+
41+
询问用户该表单有哪些字段,每个字段需要:
42+
- **字段名**(英文,如 `name``avatar``status`
43+
- **中文标签**(如 `姓名``头像``状态`
44+
- **字段类型**(见 references/templates.md 中的字段类型映射表)
45+
- **是否必填**
46+
47+
如果用户没有提供字段信息,使用默认字段 `title`(标题,string,必填)作为示例占位,并在生成后提示用户替换。
48+
49+
### Step 3:判断布局
50+
51+
字段较多时单列会导致页面过长,双列更紧凑。根据字段数量和复杂度判断是否询问用户布局偏好:
52+
53+
- **单列**`max-w-600px``space-y-6`(字段少、字段较长时适合)
54+
- **双列**`max-w-1200px``grid grid-cols-1 gap-x-8 gap-y-6 items-start md:grid-cols-2`(字段多、字段较短时适合)
55+
56+
### Step 4:确认并生成
57+
58+
汇总信息,展示将要生成的文件,确认后写入。
59+
60+
生成完成后提示:如需配置路由,请使用 `fa-route-generator` 技能;如需 API 模块,请手动创建。
61+
62+
---
63+
64+
## 命名规范
65+
66+
给定模块名 `name` 和路径 `path`(相对于 `apps/<app>/src/views/`):
67+
68+
| 用途 | 规则 | 示例(path=system, name=user) |
69+
|------|------|-------------------------------|
70+
| 视图目录 | `apps/<app>/src/views/{path}/{name}/` | `apps/<app>/src/views/system/user/` |
71+
| 组件名 | `PascalCase({path}-{name}-form)` | `SystemUserForm` |
72+
73+
---
74+
75+
## 代码模板
76+
77+
详细的代码模板和字段类型映射表见 [references/templates.md](references/templates.md)
78+
79+
生成代码时替换模板中的占位符:
80+
- `{cname}` → 模块中文名
81+
- `{componentName}` → PascalCase 组件名
82+
- `{zodSchema}` → zod 字段定义(每个必填字段对应一行 zod 规则)
83+
- `{initialValues}` → 字段初始值(string 默认 `''`,boolean 默认 `false`,number 默认 `0`,array 默认 `[]`
84+
- `{formItems}` → 各字段对应的 FormField 代码片段
85+
- `{maxWidth}` → 单列 `max-w-600px` / 双列 `max-w-1200px`
86+
- `{gridClass}` → 双列时 `grid grid-cols-1 gap-x-8 gap-y-6 items-start md:grid-cols-2` / 单列时 `space-y-6`
87+
88+
生成的代码是骨架:API 调用处用 `// TODO:` 注释标记,动态数据源(select options、upload action 等)用占位注释标记,用户根据实际接口替换。操作栏按钮使用 `FaButton`:取消用 `variant="outline"`,提交用默认 variant 并传 `:loading="isSubmitting"`

0 commit comments

Comments
 (0)