ai-spec-tool 0.1.8 → 0.1.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/skills/plan/SKILL.md +9 -1
- package/assets/skills/spec-creator/SKILL.md +2 -0
- package/assets/skills/spec-creator/assets/architecture_gen.md +3 -1
- package/assets/skills/spec-creator/assets/design_tokens_default.md +104 -0
- package/assets/skills/spec-creator/assets/design_tokens_gen.md +163 -0
- package/assets/skills/spec-creator/assets/project_architecture_gen.md +8 -6
- package/package.json +1 -1
|
@@ -7,8 +7,16 @@ description: 当用户想要执行一个plan
|
|
|
7
7
|
依赖文件清单:
|
|
8
8
|
- ./docs/global/vision.md
|
|
9
9
|
- ./docs/global/architecture.md
|
|
10
|
-
- ./docs/projects/*/architecture.md
|
|
11
10
|
|
|
11
|
+
ACTION: 检视./docs/global/architecture.md里#子专案目录,记住[__专案目录__,__专案名称(##标题就是专案名称)__,是否為前端專案]
|
|
12
|
+
|
|
13
|
+
[MARK:PROJECT_LOOP]
|
|
14
|
+
<<以下操作一个子专案都执行一次>>
|
|
15
|
+
ACTION: 檢查./docs/projects/__专案名称__/architecture.md是否存在
|
|
16
|
+
|
|
17
|
+
ACTION: 檢查./docs/projects/__专案名称__/design_tokens.md 如果此專案不屬於前端专案可跳過檢查是否存在
|
|
18
|
+
|
|
19
|
+
<<以上操作一个子专案都执行一次,若还有子专案没执行,回到[MARK:PROJECT_LOOP]重新执行>>
|
|
12
20
|
ACTION: 请先检查专案环境下是否存在依赖清单内的所有文档
|
|
13
21
|
IF: 存在缺失文件
|
|
14
22
|
输出规则:
|
|
@@ -7,6 +7,7 @@ description: 当用户想要生成某个spec.md
|
|
|
7
7
|
- 若用户选择vision: 执行 assets/vision_gen.md 内容
|
|
8
8
|
- 若用户选择architecture: 执行 assets/architecture_gen.md 内容
|
|
9
9
|
- 若用户选择project_architecture: 执行 assets/project_architecture_gen.md 内容
|
|
10
|
+
- 若用户选择project_design_tokens: 执行 assets/design_tokens_gen.md 内容
|
|
10
11
|
IF: 你可以通过上下文确定用户想要生成什么文件
|
|
11
12
|
ACTION: 直接执行对应的 xxx_gen.md 内容
|
|
12
13
|
ENDIF
|
|
@@ -19,4 +20,5 @@ ACTION:
|
|
|
19
20
|
1) vision
|
|
20
21
|
2) architecture
|
|
21
22
|
3) project_architecture
|
|
23
|
+
4) project_design_tokens
|
|
22
24
|
<<输出以上内容,不得再输出任何其他内容>>
|
|
@@ -135,16 +135,18 @@ ACTION: 等待用户回答
|
|
|
135
135
|
语言:中文为主
|
|
136
136
|
输出文件内容规则:
|
|
137
137
|
__PLACEHOLDER__ 为占位符,请勿输出,而是基于规则输出动态内容
|
|
138
|
-
__2__ 必须列出子专案的[
|
|
138
|
+
__2__ 必须列出子专案的[目录,技术栈,功能性名称,是否為前端專案]
|
|
139
139
|
<<以下为举例>>
|
|
140
140
|
## axg-web
|
|
141
141
|
- 目录: /projects/axg-web
|
|
142
142
|
- 技术栈: Next.js
|
|
143
143
|
- 描述: 网页前端
|
|
144
|
+
- 前端專案: 是
|
|
144
145
|
## axg-server
|
|
145
146
|
- 目录: /projects/axg-server
|
|
146
147
|
- 技术栈: NestJS
|
|
147
148
|
- 描述: 后端
|
|
149
|
+
- 前端專案: 否
|
|
148
150
|
<<以上为举例>>
|
|
149
151
|
__3__ 关键的端到端链路有哪些?
|
|
150
152
|
- 可列出多条
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
# Design Tokens Defaults
|
|
2
|
+
|
|
3
|
+
## 基础 Tokens
|
|
4
|
+
|
|
5
|
+
### 颜色(Base Colors)
|
|
6
|
+
- color.base.green.50 = #e6fff3
|
|
7
|
+
- color.base.green.100 = #c9ffe3
|
|
8
|
+
- color.base.green.200 = #9fffd1
|
|
9
|
+
- color.base.green.300 = #63f9b6
|
|
10
|
+
- color.base.green.400 = #2ceea1
|
|
11
|
+
- color.base.green.500 = #00df81
|
|
12
|
+
- color.base.green.600 = #00c873
|
|
13
|
+
- color.base.green.700 = #00a35f
|
|
14
|
+
- color.base.green.800 = #007a47
|
|
15
|
+
- color.base.green.900 = #04513a
|
|
16
|
+
- color.base.slate.50 = #e7f1f1
|
|
17
|
+
- color.base.slate.100 = #c9dcdc
|
|
18
|
+
- color.base.slate.200 = #a7bebe
|
|
19
|
+
- color.base.slate.300 = #7a9393
|
|
20
|
+
- color.base.slate.400 = #4f6a6a
|
|
21
|
+
- color.base.slate.500 = #2e4a4a
|
|
22
|
+
- color.base.slate.600 = #1f3a3a
|
|
23
|
+
- color.base.slate.700 = #0f2c2c
|
|
24
|
+
- color.base.slate.800 = #052322
|
|
25
|
+
- color.base.slate.900 = #011a1b
|
|
26
|
+
|
|
27
|
+
### 字体(Typography)
|
|
28
|
+
- font.family.primary = "Bebas Neue"
|
|
29
|
+
- font.family.alt = "Noto Sans", "Noto Sans TC", "Noto Sans SC", sans-serif
|
|
30
|
+
- font.size.1 = 12px
|
|
31
|
+
- font.size.2 = 14px
|
|
32
|
+
- font.size.3 = 16px
|
|
33
|
+
- font.size.4 = 20px
|
|
34
|
+
- font.size.5 = 28px
|
|
35
|
+
- font.size.6 = 40px
|
|
36
|
+
- font.weight.1 = 300
|
|
37
|
+
- font.weight.2 = 400
|
|
38
|
+
- font.weight.3 = 600
|
|
39
|
+
- font.weight.4 = 700
|
|
40
|
+
- line.height.1 = 1.1
|
|
41
|
+
- line.height.2 = 1.3
|
|
42
|
+
- line.height.3 = 1.5
|
|
43
|
+
- line.height.4 = 1.7
|
|
44
|
+
|
|
45
|
+
### 间距(Spacing)
|
|
46
|
+
- space.1 = 4px
|
|
47
|
+
- space.2 = 8px
|
|
48
|
+
- space.3 = 12px
|
|
49
|
+
- space.4 = 16px
|
|
50
|
+
- space.5 = 24px
|
|
51
|
+
- space.6 = 32px
|
|
52
|
+
- space.7 = 48px
|
|
53
|
+
- space.8 = 64px
|
|
54
|
+
|
|
55
|
+
### 圆角(Radius)
|
|
56
|
+
- radius.1 = 2px
|
|
57
|
+
- radius.2 = 4px
|
|
58
|
+
- radius.3 = 8px
|
|
59
|
+
- radius.4 = 12px
|
|
60
|
+
|
|
61
|
+
### 阴影(Shadow)
|
|
62
|
+
- shadow.1 = 0 0 6px rgba(0, 223, 129, 0.25)
|
|
63
|
+
- shadow.2 = 0 0 12px rgba(0, 223, 129, 0.35)
|
|
64
|
+
- shadow.3 = 0 0 20px rgba(0, 223, 129, 0.45)
|
|
65
|
+
- shadow.4 = 0 0 32px rgba(0, 223, 129, 0.6)
|
|
66
|
+
|
|
67
|
+
### 动效(Motion)
|
|
68
|
+
- motion.duration.1 = 120ms
|
|
69
|
+
- motion.duration.2 = 200ms
|
|
70
|
+
- motion.duration.3 = 320ms
|
|
71
|
+
- motion.duration.4 = 480ms
|
|
72
|
+
- motion.easing.standard = cubic-bezier(0.2, 0.0, 0.0, 1.0)
|
|
73
|
+
- motion.easing.emphasized = cubic-bezier(0.2, 0.0, 0.0, 1.2)
|
|
74
|
+
|
|
75
|
+
## 语义 Tokens
|
|
76
|
+
|
|
77
|
+
### 文字
|
|
78
|
+
- color.text.primary = color.base.slate.50
|
|
79
|
+
- color.text.secondary = color.base.slate.100
|
|
80
|
+
- color.text.muted = color.base.slate.300
|
|
81
|
+
- color.text.disabled = color.base.slate.500
|
|
82
|
+
|
|
83
|
+
### 背景
|
|
84
|
+
- color.bg.canvas = color.base.slate.900
|
|
85
|
+
- color.bg.surface = color.base.slate.800
|
|
86
|
+
- color.bg.elevated = color.base.slate.700
|
|
87
|
+
- color.bg.accent = color.base.green.500
|
|
88
|
+
|
|
89
|
+
### 边框
|
|
90
|
+
- color.border.default = color.base.slate.600
|
|
91
|
+
- color.border.subtle = color.base.slate.700
|
|
92
|
+
- color.border.focus = color.base.green.500
|
|
93
|
+
|
|
94
|
+
### 交互
|
|
95
|
+
- color.interactive.default = color.base.green.500
|
|
96
|
+
- color.interactive.hover = color.base.green.400
|
|
97
|
+
- color.interactive.active = color.base.green.600
|
|
98
|
+
- color.interactive.disabled = color.base.slate.600
|
|
99
|
+
|
|
100
|
+
### 反馈
|
|
101
|
+
- color.feedback.success = color.base.green.500
|
|
102
|
+
- color.feedback.warning = #ffb020
|
|
103
|
+
- color.feedback.error = #ff4d4f
|
|
104
|
+
- color.feedback.info = #3aa6ff
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
#依赖检查
|
|
2
|
+
|
|
3
|
+
依赖文件清单:
|
|
4
|
+
- ./docs/global/vision.md
|
|
5
|
+
- ./docs/global/architecture.md
|
|
6
|
+
|
|
7
|
+
ACTION: 请先检查专案环境下是否存在依赖清单内的所有文档
|
|
8
|
+
IF: 存在缺失文件
|
|
9
|
+
输出规则:
|
|
10
|
+
- __PLACEHOLDER__ 为占位符,请勿输出,而是基于规则输出动态内容
|
|
11
|
+
- __MISSING_FILE_NAME__ 缺失的文件名
|
|
12
|
+
- 若有多个缺失文件就多行显示
|
|
13
|
+
- 若用户选择 开始创建文档: 执行 skill: spec-creator
|
|
14
|
+
ACTION:
|
|
15
|
+
<<结合输出规则,输出以下内容>>
|
|
16
|
+
## 您需要先创建文档:
|
|
17
|
+
- __MISSING_FILE_NAME__
|
|
18
|
+
---
|
|
19
|
+
1) 开始创建文档
|
|
20
|
+
<<输出以上内容,不得再输出任何其他内容>>
|
|
21
|
+
ENDIF
|
|
22
|
+
|
|
23
|
+
ACTION: 阅读所有依赖文件内容来了解专案,并在遵守文件内定义的规范约束下执行后续步骤
|
|
24
|
+
ACTION: 检视./docs/global/architecture.md里#子专案目录,记住[__专案目录__,__专案名称(##标题就是专案名称)__,是否為前端專案]
|
|
25
|
+
|
|
26
|
+
[MARK:PROJECT_LOOP]
|
|
27
|
+
<<以下操作一个子专案都执行一次>>
|
|
28
|
+
IF: __专案目录__不是前端,並不需要視覺化
|
|
29
|
+
跳過這個子專案,如果有下一個子專案,檢查下一個ENDIF
|
|
30
|
+
|
|
31
|
+
ACTION:
|
|
32
|
+
<<输出以下内容>>
|
|
33
|
+
## 现在开始建立 __专案名称__ 的design_tokens文档
|
|
34
|
+
<<输出以上内容>>
|
|
35
|
+
#问题询问
|
|
36
|
+
|
|
37
|
+
ACTION:
|
|
38
|
+
<<输出以下内容>>
|
|
39
|
+
## [1/4] 请提供风格参考,并尽量结构化填写:
|
|
40
|
+
- 参考链接/图片
|
|
41
|
+
- 关键词(3-5 个)
|
|
42
|
+
- 最想要的 1 个特性(例如可读性/层级清晰/社区感/极简)
|
|
43
|
+
---
|
|
44
|
+
1) 提供参考
|
|
45
|
+
<<输出以上内容,不得再输出任何其他内容>>
|
|
46
|
+
ACTION: 等待用户回答
|
|
47
|
+
|
|
48
|
+
ACTION:
|
|
49
|
+
<<输出以下内容>>
|
|
50
|
+
## [2/4] 提供配色参考(可与风格参考相同)
|
|
51
|
+
- 参考链接/图片
|
|
52
|
+
- 关键词(3-5 个)
|
|
53
|
+
- 主要颜色倾向(例如冷色/暖色/中性/单色)
|
|
54
|
+
---
|
|
55
|
+
1) 沿用上一题的风格参考
|
|
56
|
+
2) 提供参考
|
|
57
|
+
<<输出以上内容,不得再输出任何其他内容>>
|
|
58
|
+
ACTION: 等待用户回答
|
|
59
|
+
|
|
60
|
+
输出规则:
|
|
61
|
+
- __PLACEHOLDER__ 为占位符,请勿输出,而是基于规则输出动态内容
|
|
62
|
+
- __ADVICE__ 基于[先前的对话内容,所有依赖文件](如过有),结合问题给与建议答案
|
|
63
|
+
ACTION:
|
|
64
|
+
<<结合输出规则,输出以下内容>>
|
|
65
|
+
## [3/4] 是否需要多主题?
|
|
66
|
+
- 例如 light / dark / brand
|
|
67
|
+
---
|
|
68
|
+
1) ✨__ADVICE__
|
|
69
|
+
2) 无
|
|
70
|
+
3) 需要
|
|
71
|
+
4) 直接描述
|
|
72
|
+
<<输出以上内容,不得再输出任何其他内容>>
|
|
73
|
+
ACTION: 等待用户回答
|
|
74
|
+
|
|
75
|
+
输出规则:
|
|
76
|
+
- __PLACEHOLDER__ 为占位符,请勿输出,而是基于规则输出动态内容
|
|
77
|
+
- __ADVICE__ 基于[先前的对话内容,所有依赖文件](如过有),结合问题给与建议答案
|
|
78
|
+
ACTION:
|
|
79
|
+
<<结合输出规则,输出以下内容>>
|
|
80
|
+
## [4/4] 需要支持哪些端?
|
|
81
|
+
- 可多选
|
|
82
|
+
---
|
|
83
|
+
1) ✨__ADVICE__
|
|
84
|
+
2) 网页端
|
|
85
|
+
3) 移动端
|
|
86
|
+
4) 直接描述
|
|
87
|
+
<<输出以上内容,不得再输出任何其他内容>>
|
|
88
|
+
ACTION: 等待用户回答
|
|
89
|
+
|
|
90
|
+
#输出文件
|
|
91
|
+
*仅在以上所有流程完成后才执行
|
|
92
|
+
|
|
93
|
+
输出格式:Markdown
|
|
94
|
+
语言:中文为主
|
|
95
|
+
输出文件内容规则:
|
|
96
|
+
__PLACEHOLDER__ 为占位符,请勿输出,而是基于规则输出动态内容
|
|
97
|
+
__1__ 输出需以默认值模板为基准,但必须体现风格参考:
|
|
98
|
+
1) 以 `./skills/spec-creator/assets/design_tokens_default.md` 的结构与顺序为主模板,不得改变标题层级与分类顺序。
|
|
99
|
+
2) 输出前先给出“风格摘要”(3-6 条),必须覆盖:色彩倾向、对比度倾向、字体氛围、层级密度、情绪关键词。
|
|
100
|
+
3) 若用户提供网页链接或图片,必须先浏览网页/查看图片并提取可见风格信息,再进行 tokens 调整。
|
|
101
|
+
4) 必须逐条响应用户回答:风格参考/多主题/平台/修改请求需体现在文档或 token 值中。
|
|
102
|
+
5) 若提供了风格参考,必须至少调整 3 项关键 token 类别:
|
|
103
|
+
- 颜色主色族(color.base.*)
|
|
104
|
+
- 中性色倾向(color.base.slate.*)
|
|
105
|
+
- 字体(font.family.*)
|
|
106
|
+
6) 多主题格式:新增 `## Themes`,每个主题用 `### <主题名>`,仅列语义 Tokens 覆盖值,未列出者继承基础 Tokens。
|
|
107
|
+
7) 值的来源:用户明确提供则调整;否则使用 `./skills/spec-creator/assets/design_tokens_default.md` 的默认值,不留空。
|
|
108
|
+
8) 每条 token 行必须带用途注释:token.key = value # 用途说明(简短明确)。
|
|
109
|
+
9) 风格参考需在文档顶部追加“风格参考”描述,不影响 tokens 列表。
|
|
110
|
+
10) 完成后自检:是否体现风格参考?是否调整≥3个关键 token 类别?若否,必须重写。
|
|
111
|
+
|
|
112
|
+
输出文件内容结构:
|
|
113
|
+
<<以下为实际输出文件格式,需结合输出规则生成部分动态内容>>
|
|
114
|
+
#Design Tokens
|
|
115
|
+
__1__
|
|
116
|
+
|
|
117
|
+
<<以上为实际输出文件格式,需结合输出规则生成部分动态内容>>
|
|
118
|
+
|
|
119
|
+
[MARK:1]
|
|
120
|
+
输出规则:
|
|
121
|
+
- __PLACEHOLDER__ 为占位符,请勿输出,而是基于规则输出动态内容
|
|
122
|
+
- __输出文件内容__ 显示基于[输出文件内容规则/输出文件内容结构]总结输出文件内容
|
|
123
|
+
ACTION:
|
|
124
|
+
<<结合输出规则,输出以下内容>>
|
|
125
|
+
```md
|
|
126
|
+
__输出文件内容__
|
|
127
|
+
```
|
|
128
|
+
<<输出以上内容>>
|
|
129
|
+
ACTION:
|
|
130
|
+
<<输出以下内容>>
|
|
131
|
+
## 是否接受将以上总结输出并保存成文件?
|
|
132
|
+
---
|
|
133
|
+
1) 接受
|
|
134
|
+
2) 提出修改
|
|
135
|
+
<<输出以上内容,不得再输出任何其他内容>>
|
|
136
|
+
IF: 用户选择接受
|
|
137
|
+
ACTION: 将最终确认的输出版本保存到./docs/projects/{_project_name}/design_tokens.md
|
|
138
|
+
ACTION:
|
|
139
|
+
<<输出以下内容>>
|
|
140
|
+
> ✅文件已保存于./docs/projects/{_project_name}/design_tokens.md
|
|
141
|
+
<<输出以上内容>>
|
|
142
|
+
ENDIF
|
|
143
|
+
|
|
144
|
+
IF: 用户没有选择接受
|
|
145
|
+
ACTION: 带着用户的修改提议,回到[MARK:1]重新执行
|
|
146
|
+
ENDIF
|
|
147
|
+
|
|
148
|
+
ACTION:
|
|
149
|
+
<<输出以下内容>>
|
|
150
|
+
## 是否基於剛剛設計的 ./docs/projects/{_project_name}/design_tokens.md
|
|
151
|
+
依照子專案 __专案名称__ 的技術棧
|
|
152
|
+
生成關鍵風格代碼文件?
|
|
153
|
+
---
|
|
154
|
+
1) 是
|
|
155
|
+
<<输出以上内容,不得再输出任何其他内容>>
|
|
156
|
+
<<以上操作一个子专案都执行一次,若还有子专案没执行,回到[MARK:PROJECT_LOOP]重新执行>>
|
|
157
|
+
ACTION:
|
|
158
|
+
<<输出以下内容>>
|
|
159
|
+
## 接下来...
|
|
160
|
+
---
|
|
161
|
+
1) 完成并保存设计 Token
|
|
162
|
+
2) 直接描述
|
|
163
|
+
<<输出以上内容,不得再输出任何其他内容>>
|
|
@@ -22,11 +22,13 @@ ENDIF
|
|
|
22
22
|
|
|
23
23
|
ACTION: 阅读所有依赖文件内容来了解专案,并在遵守文件内定义的规范约束下执行后续步骤
|
|
24
24
|
ACTION: 基于[所有依赖文件,与用户的对话记录]整理出用户想要实现的功能会改动是什么
|
|
25
|
-
ACTION: 检视./docs/global/architecture.md里#子专案目录,记住[__专案目录__,__专案名称(##标题就是专案名称)__]
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
ACTION: 检视./docs/global/architecture.md里#子专案目录,记住[__专案目录__,__专案名称(##标题就是专案名称)__,是否為前端專案]
|
|
26
|
+
|
|
27
|
+
[MARK:PROJECT_LOOP]
|
|
28
|
+
<<以下操作一个子专案都执行一次>>
|
|
29
|
+
ACTION:
|
|
28
30
|
<<输出以下内容>>
|
|
29
|
-
## 现在开始建立
|
|
31
|
+
## 现在开始建立 {_project_name} 的architecture文档
|
|
30
32
|
<<输出以上内容>>
|
|
31
33
|
#问题询问
|
|
32
34
|
|
|
@@ -59,7 +61,7 @@ ACTION: 等待用户回答
|
|
|
59
61
|
|
|
60
62
|
输出规则:
|
|
61
63
|
- __PLACEHOLDER__ 为占位符,请勿输出,而是基于规则输出动态内容
|
|
62
|
-
- __ADVICE__ 基于[先前的对话内容,所有依赖文件](如过有),结合问题给与建议答案,层级名称请用英文命名,[回答格式范例](Adapter: `
|
|
64
|
+
- __ADVICE__ 基于[先前的对话内容,所有依赖文件](如过有),结合问题给与建议答案,层级名称请用英文命名,[回答格式范例](Adapter: `{_project_dir}/src/adapters/`; Service: `{_project_dir}/src/services/`;Component: `{_project_dir}/src/components/`)
|
|
63
65
|
ACTION:
|
|
64
66
|
<<结合输出规则,输出以下内容>>
|
|
65
67
|
## [3/3] 请定义每一层的文件落点?
|
|
@@ -125,4 +127,4 @@ IF: 用户没有选择接受
|
|
|
125
127
|
ACTION: 带着用户的修改提议,回到[MARK:1]重新执行
|
|
126
128
|
ENDIF
|
|
127
129
|
|
|
128
|
-
<<以上操作一个子专案都执行一次,若还有子专案没执行,回到[MARK:
|
|
130
|
+
<<以上操作一个子专案都执行一次,若还有子专案没执行,回到[MARK:PROJECT_LOOP]重新执行>>
|