self-evolve-framework 1.0.7 → 1.1.0
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/README.md +12 -8
- package/bin/cli.js +63 -35
- package/package.json +1 -1
- package/template/rules/CodeGraph.mdc +23 -0
- package/template/rules/Svelte_5.mdc +167 -0
- package/template/rules/Svelte_Flow.mdc +176 -0
- package/template/rules/Tailwind_CSS_v4.mdc +187 -0
- package/template/rules/Tauri.mdc +145 -0
- package/template/rules/app-error-pattern.mdc +65 -0
- package/template/rules/invoke-safe-pattern.mdc +53 -0
- package/template/rules/js.mdc +10 -0
- package/template/rules/powershell.mdc +9 -0
- package/template/rules/self-evolve.mdc +4 -4
- package/template/rules//346/227/245/345/277/227.mdc +15 -0
- package/template/rules//350/257/267/346/261/202.mdc +49 -0
- package/template/skills/caveman/SKILL.md +49 -0
- package/template/skills/check/SKILL.md +393 -0
- package/template/skills/check/agents/reviewer-architecture.md +39 -0
- package/template/skills/check/agents/reviewer-security.md +39 -0
- package/template/skills/check/references/persona-catalog.md +56 -0
- package/template/skills/check/references/project-context.md +120 -0
- package/template/skills/check/references/public-reply.md +14 -0
- package/template/skills/check/scripts/audit_signals.py +666 -0
- package/template/skills/check/scripts/run-tests.sh +19 -0
- package/template/skills/design/SKILL.md +173 -0
- package/template/skills/design/references/design-aesthetic-quality.md +67 -0
- package/template/skills/design/references/design-data-viz.md +34 -0
- package/template/skills/design/references/design-reference.md +295 -0
- package/template/skills/design/references/design-tokens.md +45 -0
- package/template/skills/design/references/design-traps.md +43 -0
- package/template/skills/design-an-interface/SKILL.md +94 -0
- package/template/skills/diagnose/SKILL.md +117 -0
- package/template/skills/diagnose/scripts/hitl-loop.template.sh +41 -0
- package/template/skills/edit-article/SKILL.md +14 -0
- package/template/skills/git-guardrails-claude-code/SKILL.md +95 -0
- package/template/skills/git-guardrails-claude-code/scripts/block-dangerous-git.sh +25 -0
- package/template/skills/grill-me/SKILL.md +10 -0
- package/template/skills/grill-with-docs/ADR-FORMAT.md +47 -0
- package/template/skills/grill-with-docs/CONTEXT-FORMAT.md +60 -0
- package/template/skills/grill-with-docs/SKILL.md +88 -0
- package/template/skills/handoff/SKILL.md +15 -0
- package/template/skills/health/SKILL.md +260 -0
- package/template/skills/health/agents/inspector-context.md +119 -0
- package/template/skills/health/agents/inspector-control.md +84 -0
- package/template/skills/health/agents/inspector-maintainability.md +55 -0
- package/template/skills/health/scripts/check-agent-context.sh +5 -0
- package/template/skills/health/scripts/check-doc-refs.sh +8 -0
- package/template/skills/health/scripts/check-maintainability.sh +8 -0
- package/template/skills/health/scripts/check-verifier-output.sh +5 -0
- package/template/skills/health/scripts/check_agent_context.py +444 -0
- package/template/skills/health/scripts/check_doc_refs.py +110 -0
- package/template/skills/health/scripts/check_maintainability.py +635 -0
- package/template/skills/health/scripts/check_verifier_output.py +116 -0
- package/template/skills/health/scripts/collect-data.sh +751 -0
- package/template/skills/hunt/SKILL.md +232 -0
- package/template/skills/hunt/references/failure-patterns.md +138 -0
- package/template/skills/hunt/references/ime-unicode.md +58 -0
- package/template/skills/hunt/references/logging-techniques.md +72 -0
- package/template/skills/hunt/references/rendering-debug.md +34 -0
- package/template/skills/impeccable/SKILL.md +47 -0
- package/template/skills/improve-codebase-architecture/DEEPENING.md +37 -0
- package/template/skills/improve-codebase-architecture/HTML-REPORT.md +123 -0
- package/template/skills/improve-codebase-architecture/INTERFACE-DESIGN.md +44 -0
- package/template/skills/improve-codebase-architecture/LANGUAGE.md +53 -0
- package/template/skills/improve-codebase-architecture/SKILL.md +81 -0
- package/template/skills/learn/SKILL.md +140 -0
- package/template/skills/migrate-to-shoehorn/SKILL.md +118 -0
- package/template/skills/obsidian-vault/SKILL.md +59 -0
- package/template/skills/prototype/LOGIC.md +79 -0
- package/template/skills/prototype/SKILL.md +30 -0
- package/template/skills/prototype/UI.md +112 -0
- package/template/skills/qa/SKILL.md +130 -0
- package/template/skills/read/SKILL.md +141 -0
- package/template/skills/read/references/read-methods.md +129 -0
- package/template/skills/read/scripts/fetch.sh +106 -0
- package/template/skills/read/scripts/fetch_feishu.py +251 -0
- package/template/skills/read/scripts/fetch_local.py +218 -0
- package/template/skills/read/scripts/fetch_weixin.py +107 -0
- package/template/skills/request-refactor-plan/SKILL.md +68 -0
- package/template/skills/review/SKILL.md +78 -0
- package/template/skills/rust-auto-fix/SKILL.md +94 -0
- package/template/skills/scaffold-exercises/SKILL.md +106 -0
- package/template/skills/sdd-dev/SKILL.md +114 -0
- package/template/skills/setup-matt-pocock-skills/SKILL.md +121 -0
- package/template/skills/setup-matt-pocock-skills/domain.md +51 -0
- package/template/skills/setup-matt-pocock-skills/issue-tracker-github.md +22 -0
- package/template/skills/setup-matt-pocock-skills/issue-tracker-gitlab.md +23 -0
- package/template/skills/setup-matt-pocock-skills/issue-tracker-local.md +19 -0
- package/template/skills/setup-matt-pocock-skills/triage-labels.md +15 -0
- package/template/skills/setup-pre-commit/SKILL.md +91 -0
- package/template/skills/skillopt-sleep/SKILL.md +1 -1
- package/template/skills/svelte-warnings-fix/SKILL.md +94 -0
- package/template/skills/tauri-nsis-installer-icon/SKILL.md +92 -0
- package/template/skills/tauri-nsis-installer-icon/references/tauri-nsis-schema.md +71 -0
- package/template/skills/tb/SKILL.md +62 -0
- package/template/skills/tdd/SKILL.md +109 -0
- package/template/skills/tdd/deep-modules.md +33 -0
- package/template/skills/tdd/interface-design.md +31 -0
- package/template/skills/tdd/mocking.md +59 -0
- package/template/skills/tdd/refactoring.md +10 -0
- package/template/skills/tdd/tests.md +61 -0
- package/template/skills/teach/GLOSSARY-FORMAT.md +35 -0
- package/template/skills/teach/LEARNING-RECORD-FORMAT.md +46 -0
- package/template/skills/teach/MISSION-FORMAT.md +31 -0
- package/template/skills/teach/RESOURCES-FORMAT.md +32 -0
- package/template/skills/teach/SKILL.md +91 -0
- package/template/skills/think/SKILL.md +184 -0
- package/template/skills/to-issues/SKILL.md +83 -0
- package/template/skills/to-prd/SKILL.md +74 -0
- package/template/skills/triage/AGENT-BRIEF.md +168 -0
- package/template/skills/triage/OUT-OF-SCOPE.md +101 -0
- package/template/skills/triage/SKILL.md +103 -0
- package/template/skills/ubiquitous-language/SKILL.md +93 -0
- package/template/skills/ver/SKILL.md +62 -0
- package/template/skills/write/SKILL.md +209 -0
- package/template/skills/write/references/write-en.md +199 -0
- package/template/skills/write/references/write-product-localization.md +43 -0
- package/template/skills/write/references/write-zh-bilingual.md +59 -0
- package/template/skills/write/references/write-zh-prose.md +50 -0
- package/template/skills/write/references/write-zh-release-notes.md +40 -0
- package/template/skills/write/references/write-zh.md +721 -0
- package/template/skills/write-a-skill/SKILL.md +117 -0
- package/template/skills/writing-beats/SKILL.md +52 -0
- package/template/skills/writing-fragments/SKILL.md +75 -0
- package/template/skills/writing-shape/SKILL.md +64 -0
- package/template/skills/zoom-out/SKILL.md +7 -0
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Tailwind CSS v4 项目编码规范(严格遵循官方标准)
|
|
3
|
+
alwaysApply: true
|
|
4
|
+
enabled: true
|
|
5
|
+
updatedAt: 2026-05-13T14:14:00.000Z
|
|
6
|
+
provider:
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
Tailwind CSS v4 项目编码规范(严格遵循官方标准)
|
|
10
|
+
完全对齐 Tailwind CSS v4 官方设计理念、书写规范、分层原则、最佳实践,不自定义非标写法、不滥用随意堆砌、不脱离官方语义。适用:Tailwind CSS v4,适配 Svelte5 / Vue / React / Tauri 所有项目。
|
|
11
|
+
|
|
12
|
+
一、核心原则(官方底层规范)
|
|
13
|
+
优先原子类,少写自定义 CSS,遵循「工具优先」官方理念。
|
|
14
|
+
语义化优先:优先用官方内置预设类,不随意造自定义工具类。
|
|
15
|
+
样式内聚在元素上,尽量不拆冗余全局 CSS。
|
|
16
|
+
遵循默认设计系统:间距、圆角、阴影、色值严格使用官方预设刻度,不写魔法数值。
|
|
17
|
+
最小自定义:仅在官方无对应语义时,才扩展主题。
|
|
18
|
+
|
|
19
|
+
二、项目引入与初始化规范(Tailwind v4 标准)
|
|
20
|
+
1. 入口引入规范(v4 新语法)
|
|
21
|
+
全局只引入一次 Tailwind 基础样式
|
|
22
|
+
禁止多处重复引入、禁止混用 CDN + 本地版
|
|
23
|
+
|
|
24
|
+
css
|
|
25
|
+
/* 全局主样式文件 src/app.css */
|
|
26
|
+
@import "tailwindcss";
|
|
27
|
+
2. 主题扩展规范(v4 新方式)
|
|
28
|
+
v4 不再使用 tailwind.config.js,改用 CSS @theme 指令
|
|
29
|
+
css
|
|
30
|
+
/* 在全局 CSS 文件中扩展主题 */
|
|
31
|
+
@import "tailwindcss";
|
|
32
|
+
|
|
33
|
+
@theme {
|
|
34
|
+
/* 扩展颜色 */
|
|
35
|
+
--color-brand: #3490dc;
|
|
36
|
+
--color-brand-light: #82c4f8;
|
|
37
|
+
|
|
38
|
+
/* 扩展间距 */
|
|
39
|
+
--spacing-section: 5rem;
|
|
40
|
+
|
|
41
|
+
/* 扩展圆角 */
|
|
42
|
+
--radius-card: 1rem;
|
|
43
|
+
}
|
|
44
|
+
3. 内容扫描规范(v4 新方式)
|
|
45
|
+
v4 不再使用 tailwind.config.js 的 content 字段,改用 CSS @source 指令
|
|
46
|
+
css
|
|
47
|
+
@import "tailwindcss";
|
|
48
|
+
|
|
49
|
+
/* 指定需要扫描的源文件目录 */
|
|
50
|
+
@source "../src";
|
|
51
|
+
@source "../components";
|
|
52
|
+
4. 配置文件规范(v4 不再需要)
|
|
53
|
+
v4 默认不需要 tailwind.config.js / tailwind.config.ts 文件
|
|
54
|
+
所有配置都在 CSS 文件中通过 @theme、@source 等指令完成
|
|
55
|
+
仅在需要插件或特殊配置时,才创建 tailwind.config.ts
|
|
56
|
+
|
|
57
|
+
三、类名书写顺序规范(官方推荐排序规则)
|
|
58
|
+
严格按官方约定顺序书写,固定顺序,便于维护、可读性统一:
|
|
59
|
+
布局定位:container / fixed / absolute / relative / static
|
|
60
|
+
盒模型:w-* h-* min-w-* max-h-* m-* p-*
|
|
61
|
+
弹性 / 网格:flex grid justify-* items-* gap-*
|
|
62
|
+
边框圆角:border border-* rounded-*
|
|
63
|
+
背景颜色:bg-*
|
|
64
|
+
文字排版:text-* font-* leading-* tracking-*
|
|
65
|
+
阴影层级:shadow-* z-*
|
|
66
|
+
交互状态:hover: focus: active: disabled:
|
|
67
|
+
响应式:sm: md: lg: xl: 放最后层叠
|
|
68
|
+
|
|
69
|
+
✅ 正确示例
|
|
70
|
+
html
|
|
71
|
+
<div class="relative w-full p-4 flex items-center gap-2 rounded-lg bg-white text-gray-700 shadow hover:shadow-md md:p-6"></div>
|
|
72
|
+
❌ 禁止:随意乱序、状态类穿插在中间。
|
|
73
|
+
|
|
74
|
+
四、响应式断点规范(官方默认断点不修改)
|
|
75
|
+
严格使用官方默认断点,不擅自改断点像素:
|
|
76
|
+
sm:640px
|
|
77
|
+
md:768px
|
|
78
|
+
lg:1024px
|
|
79
|
+
xl:1280px
|
|
80
|
+
2xl:1536px
|
|
81
|
+
|
|
82
|
+
书写规则:移动端优先,先写默认样式,再逐层加 sm:/md:/lg: 覆盖。
|
|
83
|
+
html
|
|
84
|
+
<div class="text-sm md:text-base lg:text-lg"></div>
|
|
85
|
+
|
|
86
|
+
五、状态变体规范(官方标准)
|
|
87
|
+
只使用官方原生变体,不自定义伪类语法:
|
|
88
|
+
悬浮:hover:
|
|
89
|
+
聚焦:focus:
|
|
90
|
+
激活:active:
|
|
91
|
+
禁用:disabled:
|
|
92
|
+
子元素:first: last: odd: even:
|
|
93
|
+
暗黑模式:dark:
|
|
94
|
+
|
|
95
|
+
写法:变体前缀在前,基础类在后
|
|
96
|
+
html
|
|
97
|
+
<button class="bg-blue-500 hover:bg-blue-600 disabled:opacity-50"></button>
|
|
98
|
+
|
|
99
|
+
六、颜色使用规范(官方)
|
|
100
|
+
优先使用官方语义色阶:gray-50 ~ gray-900、blue-500 等
|
|
101
|
+
禁止随意写十六进制、rgb 魔法色值
|
|
102
|
+
项目主题色统一在 @theme 的 --color-* 中扩展
|
|
103
|
+
透明度统一用官方语法:bg-blue-500/50
|
|
104
|
+
|
|
105
|
+
七、间距、尺寸规范(禁止魔法数字)
|
|
106
|
+
宽高、内边距、外边距、间距 只用官方预设刻度:
|
|
107
|
+
0, 0.5, 1, 1.5, 2, 3, 4, 5, 6, 8, 10 …
|
|
108
|
+
禁止:p-7 m-13 这类非预设非标值
|
|
109
|
+
必须自定义时,统一在 @theme 的 --spacing-* 中扩展,不直接写任意值
|
|
110
|
+
|
|
111
|
+
八、复用样式规范(官方三种标准方式)
|
|
112
|
+
1. 少量样式:直接写原子类,不抽离
|
|
113
|
+
2. 中等复用:使用 @apply(官方允许)
|
|
114
|
+
css
|
|
115
|
+
@layer components {
|
|
116
|
+
.btn-primary {
|
|
117
|
+
@apply px-4 py-2 rounded-lg bg-blue-500 text-white hover:bg-blue-600;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
强制规则:@apply 必须放在 @layer components / @layer utilities 内,禁止裸写。
|
|
121
|
+
|
|
122
|
+
3. 全局通用组件:封装成 Svelte/Vue 组件,不堆砌全局 CSS
|
|
123
|
+
禁止:动辄写大量自定义全局 class 替代原子类。
|
|
124
|
+
|
|
125
|
+
九、Layer 分层规范(官方强制层级)
|
|
126
|
+
严格遵循 Tailwind 三层层级,不打乱优先级:
|
|
127
|
+
@layer base:基础标签默认样式(html、body、h1~h6)
|
|
128
|
+
@layer components:可复用组件样式
|
|
129
|
+
@layer utilities:自定义工具类
|
|
130
|
+
|
|
131
|
+
禁止不写 @layer 直接全局覆写,避免优先级错乱。
|
|
132
|
+
|
|
133
|
+
十、暗黑模式规范(官方标准)
|
|
134
|
+
采用官方 class 模式,不混用 media 模式:
|
|
135
|
+
css
|
|
136
|
+
/* 在 tailwind.config.ts 中配置(如需要) */
|
|
137
|
+
export default {
|
|
138
|
+
darkMode: 'class'
|
|
139
|
+
}
|
|
140
|
+
页面通过给根元素加 dark 类切换,样式用 dark: 前缀。
|
|
141
|
+
|
|
142
|
+
十一、禁止与不推荐写法(官方避坑)
|
|
143
|
+
❌ 禁止
|
|
144
|
+
大量写自定义原生 CSS 替代原子类
|
|
145
|
+
随意修改官方默认断点、默认色板
|
|
146
|
+
滥用任意值语法 w-[123px] 当成常态
|
|
147
|
+
class 名无顺序、杂乱堆砌
|
|
148
|
+
在组件 style 里写大量非工具类样式
|
|
149
|
+
使用 tailwind.config.js 的 theme.extend(v4 已废弃)
|
|
150
|
+
|
|
151
|
+
✅ 允许
|
|
152
|
+
必要时用 [] 任意值,但尽量少用、统一注释
|
|
153
|
+
在 @theme 中增量扩展主题
|
|
154
|
+
合理使用 @apply 做通用组件抽象
|
|
155
|
+
|
|
156
|
+
十二、适配 Svelte5 / Tauri / Svelte Flow 项目附加规则
|
|
157
|
+
Svelte 组件全部样式优先用 Tailwind 原子类,少用 <style scoped>
|
|
158
|
+
Svelte Flow 自定义节点样式、画布控件统一用 Tailwind,不写冗余原生 CSS
|
|
159
|
+
Tauri 窗口、全局布局全部用 Tailwind 布局类控制
|
|
160
|
+
所有组件严格遵循「类名排序、响应式 mobile-first、无魔法值」
|
|
161
|
+
|
|
162
|
+
十三、AI 编码强制约束规则
|
|
163
|
+
所有样式优先使用 Tailwind v4 官方原子类,不主动生成自定义 CSS;
|
|
164
|
+
class 严格按「布局→盒模型→弹性→边框→背景→文字→阴影→状态→响应式」固定顺序;
|
|
165
|
+
禁止使用魔法数字、非标间距、随意十六进制色;
|
|
166
|
+
复用样式优先封装组件,其次 @apply 并放入对应 @layer;
|
|
167
|
+
响应式严格移动端优先,使用官方默认断点不改动;
|
|
168
|
+
不滥用 [] 任意值,仅特殊场景少量使用;
|
|
169
|
+
v4 项目必须使用 @import "tailwindcss" 引入,禁止使用旧的 @tailwind 指令。
|
|
170
|
+
|
|
171
|
+
十四、Tailwind v4 与 v3 主要差异对照表
|
|
172
|
+
| 功能 | Tailwind v3(已废弃) | Tailwind v4(当前使用) |
|
|
173
|
+
|------|---------------------|----------------------|
|
|
174
|
+
| 引入方式 | @tailwind base/components/utilities | @import "tailwindcss" |
|
|
175
|
+
| 配置文件 | tailwind.config.js | 无(改用 CSS @theme) |
|
|
176
|
+
| 内容扫描 | content: [] in config | @source in CSS |
|
|
177
|
+
| 主题扩展 | theme.extend in JS | @theme { } in CSS |
|
|
178
|
+
| 插件注册 | plugins: [] in config | @plugin in CSS |
|
|
179
|
+
| 前缀 | prefix in config | @prefix in CSS |
|
|
180
|
+
|
|
181
|
+
十五、v4 项目结构示例
|
|
182
|
+
plaintext
|
|
183
|
+
src/
|
|
184
|
+
├── app.css # 全局样式(包含 @import "tailwindcss" 和 @theme)
|
|
185
|
+
├── routes/ # 路由页面
|
|
186
|
+
├── lib/ # 工具、组件、store
|
|
187
|
+
└── tailwind.config.ts # 可选,仅在使用插件时需要
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
---
|
|
2
|
+
description:
|
|
3
|
+
alwaysApply: true
|
|
4
|
+
enabled: true
|
|
5
|
+
updatedAt: 2026-05-13T04:29:03.207Z
|
|
6
|
+
provider:
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
Tauri 项目编码规范(严格遵循 Tauri 官方最新规范)
|
|
10
|
+
完全对齐 Tauri 官方文档、官方最佳实践、安全准则、架构设计与 API 约定,无自定义扩展、无野路子写法。
|
|
11
|
+
适用:Tauri v2 + Tauri CLI 官方标准,前端可搭配 Svelte / React / Vue / Vanilla。
|
|
12
|
+
一、核心架构规范(官方强制标准)
|
|
13
|
+
Tauri 官方唯一架构:
|
|
14
|
+
前端层:Web 技术(HTML/JS/CSS/ 框架)
|
|
15
|
+
核心层:Rust 后端(src-tauri/)
|
|
16
|
+
IPC 通信:唯一官方通信机制(禁止直接跨域 / 原生调用)
|
|
17
|
+
命令式 API:前端只能调用 Rust 注册的命令,不能直接操作系统
|
|
18
|
+
二、项目结构规范(官方固定目录结构)
|
|
19
|
+
plaintext
|
|
20
|
+
你的项目/
|
|
21
|
+
├── src/ # 前端源码(官方标准)
|
|
22
|
+
├── src-tauri/ # Tauri 核心目录(官方固定名称,禁止修改)
|
|
23
|
+
│ ├── build.rs # 官方构建脚本(禁止删除)
|
|
24
|
+
│ ├── Cargo.toml # Rust 配置(严格遵循官方格式)
|
|
25
|
+
│ ├── tauri.conf.json # Tauri 主配置(官方 schema 严格校验)
|
|
26
|
+
│ └── src/
|
|
27
|
+
│ ├── lib.rs # 官方推荐:命令与逻辑入口
|
|
28
|
+
│ └── main.rs # 程序主入口(官方固定代码)
|
|
29
|
+
└── package.json # 前端依赖 + Tauri 脚本
|
|
30
|
+
三、tauri.conf.json 规范(官方严格 Schema)
|
|
31
|
+
1. 必须遵守的官方字段规则
|
|
32
|
+
json
|
|
33
|
+
{
|
|
34
|
+
"$schema": "./node_modules/@tauri-apps/cli/schema.json",
|
|
35
|
+
"productName": "你的应用名",
|
|
36
|
+
"version": "0.1.0",
|
|
37
|
+
"identifier": "com.你的域名.应用名",
|
|
38
|
+
"build": {
|
|
39
|
+
"beforeDevCommand": "你的前端启动命令",
|
|
40
|
+
"beforeBuildCommand": "你的前端构建命令",
|
|
41
|
+
"devPath": "http://你的开发地址",
|
|
42
|
+
"distDir": "../dist" // 前端输出目录(官方标准)
|
|
43
|
+
},
|
|
44
|
+
"bundle": {
|
|
45
|
+
"active": true,
|
|
46
|
+
"targets": "all",
|
|
47
|
+
"icon": [
|
|
48
|
+
"icons/32x32.png",
|
|
49
|
+
"icons/128x128.png",
|
|
50
|
+
"icons/256x256.png",
|
|
51
|
+
"icons/512x512.png"
|
|
52
|
+
]
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
2. 官方强制规则
|
|
56
|
+
必须包含 $schema 用于校验
|
|
57
|
+
identifier 必须是反向域名格式
|
|
58
|
+
icon 必须提供多尺寸,严格按官方要求
|
|
59
|
+
禁止添加非官方字段
|
|
60
|
+
四、Rust 代码规范(官方标准)
|
|
61
|
+
1. main.rs(官方固定模板)
|
|
62
|
+
rust
|
|
63
|
+
运行
|
|
64
|
+
// 官方唯一标准写法,禁止修改
|
|
65
|
+
fn main() {
|
|
66
|
+
tauri::Builder::default()
|
|
67
|
+
.run(tauri::generate_context!())
|
|
68
|
+
.expect("error while running tauri application");
|
|
69
|
+
}
|
|
70
|
+
2. 命令注册规范(官方唯一方式)
|
|
71
|
+
rust
|
|
72
|
+
运行
|
|
73
|
+
// lib.rs(官方推荐)
|
|
74
|
+
use tauri::command;
|
|
75
|
+
|
|
76
|
+
// 官方标准命令
|
|
77
|
+
#[command]
|
|
78
|
+
fn greet(name: &str) -> String {
|
|
79
|
+
format!("Hello, {}!", name)
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// 官方标准初始化
|
|
83
|
+
#[tauri::main]
|
|
84
|
+
fn main() {
|
|
85
|
+
tauri::Builder::default()
|
|
86
|
+
.invoke_handler(tauri::generate_handler![greet]) // 命令注册
|
|
87
|
+
.run(tauri::generate_context!())
|
|
88
|
+
.expect("error while running tauri application");
|
|
89
|
+
}
|
|
90
|
+
3. Rust 调用规范
|
|
91
|
+
所有前端可调用功能必须用 #[command] 注册
|
|
92
|
+
禁止无权限、无校验的系统操作
|
|
93
|
+
错误处理必须使用 Result<T, E>
|
|
94
|
+
五、IPC / 前端调用规范(官方安全准则)
|
|
95
|
+
1. 前端调用 Rust 命令(官方唯一 API)
|
|
96
|
+
javascript
|
|
97
|
+
运行
|
|
98
|
+
import { invoke } from '@tauri-apps/api/core'
|
|
99
|
+
|
|
100
|
+
// 官方标准调用方式
|
|
101
|
+
const result = await invoke('greet', { name: 'Tauri' })
|
|
102
|
+
2. 官方安全铁律
|
|
103
|
+
禁止前端直接访问文件系统 / 网络 / 原生能力
|
|
104
|
+
所有操作必须走 Rust 命令
|
|
105
|
+
最小权限原则:只声明需要的权限
|
|
106
|
+
六、权限规范(官方 CSP + 权限白名单)
|
|
107
|
+
1. tauri.conf.json 权限声明
|
|
108
|
+
json
|
|
109
|
+
"permissions": [
|
|
110
|
+
"path",
|
|
111
|
+
"fs:read",
|
|
112
|
+
"window:allow-close"
|
|
113
|
+
]
|
|
114
|
+
只添加业务需要的权限
|
|
115
|
+
禁止使用 * 通配符
|
|
116
|
+
严格遵循官方权限列表
|
|
117
|
+
2. CSP 内容安全策略(官方强制)
|
|
118
|
+
json
|
|
119
|
+
"csp": "default-src 'self'; img-src 'self' data: asset:;"
|
|
120
|
+
禁止 unsafe-inline、unsafe-eval
|
|
121
|
+
遵循最小信任原则
|
|
122
|
+
七、窗口管理规范(官方 API)
|
|
123
|
+
javascript
|
|
124
|
+
运行
|
|
125
|
+
import { getCurrentWindow } from '@tauri-apps/api/window'
|
|
126
|
+
|
|
127
|
+
// 官方标准用法
|
|
128
|
+
const appWindow = getCurrentWindow()
|
|
129
|
+
await appWindow.maximize()
|
|
130
|
+
await appWindow.setSize({ width: 800, height: 600 })
|
|
131
|
+
禁止直接操作 DOM window 模拟窗口
|
|
132
|
+
只使用官方 @tauri-apps/api/window
|
|
133
|
+
八、插件使用规范(官方)
|
|
134
|
+
只使用 @tauri-apps/plugin-* 官方插件
|
|
135
|
+
禁止引入第三方原生桥接库
|
|
136
|
+
插件必须在 tauri.conf.json 正确配置
|
|
137
|
+
九、开发与构建命令(官方唯一标准)
|
|
138
|
+
bash
|
|
139
|
+
运行
|
|
140
|
+
# 开发模式
|
|
141
|
+
tauri dev
|
|
142
|
+
|
|
143
|
+
# 生产构建
|
|
144
|
+
tauri build
|
|
145
|
+
禁止使用自定义编译脚本绕过官方 CLI。
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: 强制使用 AppError 统一错误类型的规则。
|
|
3
|
+
alwaysApply: true
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# AppError Rust 错误规范
|
|
7
|
+
|
|
8
|
+
> SheetFlow 项目特有规则。所有 `#[command]` 必须返回 `Result<T, AppError>`,
|
|
9
|
+
> 使用 `src-tauri/src/error.rs` 中定义的 6 个变体。
|
|
10
|
+
|
|
11
|
+
## 强制规则
|
|
12
|
+
|
|
13
|
+
### 所有 #[command] 必须返回 Result<T, AppError>
|
|
14
|
+
|
|
15
|
+
```rust
|
|
16
|
+
use crate::error::AppError;
|
|
17
|
+
|
|
18
|
+
// ✅ 正确
|
|
19
|
+
#[command]
|
|
20
|
+
fn some_command(input: String) -> Result<String, AppError> {
|
|
21
|
+
Ok(input.trim().to_string())
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
// ❌ 禁止 — 返回 Result<T, String>
|
|
25
|
+
// ❌ 禁止 — 无错误处理
|
|
26
|
+
// ❌ 禁止 — 使用 anyhow::Error
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### AppError 的 6 个变体
|
|
30
|
+
|
|
31
|
+
| 变体 | 用途 | 示例 |
|
|
32
|
+
|------|------|------|
|
|
33
|
+
| `AppError::FileNotFound` | 文件/路径不存在 | `AppError::FileNotFound(path)` |
|
|
34
|
+
| `AppError::Io` | IO 错误 | `AppError::Io(e)` |
|
|
35
|
+
| `AppError::Parse` | 解析失败(JSON/CSV) | `AppError::Parse(msg)` |
|
|
36
|
+
| `AppError::Validation` | 参数校验失败 | `AppError::Validation(msg)` |
|
|
37
|
+
| `AppError::Execution` | 执行时错误 | `AppError::Execution(msg)` |
|
|
38
|
+
| `AppError::Generic` | 其他错误 | `AppError::Generic(msg)` |
|
|
39
|
+
|
|
40
|
+
```rust
|
|
41
|
+
// ✅ 正确 — 用对应变体
|
|
42
|
+
Err(AppError::Validation("参数不能为空".into()))
|
|
43
|
+
|
|
44
|
+
// ❌ 禁止 — 全部用 Generic
|
|
45
|
+
Err(AppError::Generic("参数不能为空".into()))
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### 前端接收格式
|
|
49
|
+
|
|
50
|
+
`AppError` 使用 `#[serde(tag = "type", content = "message")]`,前端收到:
|
|
51
|
+
|
|
52
|
+
```json
|
|
53
|
+
{ "type": "Validation", "message": "参数不能为空" }
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Validation 错误特殊处理
|
|
57
|
+
|
|
58
|
+
Validation 类型的错误会 re-throw(不由 invokeSafe 吞掉),供调用方做表单校验反馈。
|
|
59
|
+
|
|
60
|
+
## 新增命令流程
|
|
61
|
+
|
|
62
|
+
1. 新建 `.rs` 文件 → `src-tauri/src/commands/`
|
|
63
|
+
2. 在 `mod.rs` 注册模块 + `lib.rs` 注册命令
|
|
64
|
+
3. 返回类型用 `Result<T, AppError>`
|
|
65
|
+
4. 错误用对应的变体,不要全部塞 Generic
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: 强制使用 invokeSafe + INVOKE_ERROR 模式的规则。防止前端 IPC 调用错误处理不一致。
|
|
3
|
+
alwaysApply: true
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# invokeSafe 调用规范
|
|
7
|
+
|
|
8
|
+
> SheetFlow 项目特有规则。当 Rust `#[command]` 返回 `Result<T, AppError>` 时,`Ok(())` 会被序列化为 JSON `null`,
|
|
9
|
+
> 导致 `if (!result)` 错误地认为"结果是空"。必须统一使用 `invokeSafe` + `=== INVOKE_ERROR` 判断。
|
|
10
|
+
|
|
11
|
+
## 强制规则
|
|
12
|
+
|
|
13
|
+
### 所有 IPC 调用必须使用 invokeSafe
|
|
14
|
+
|
|
15
|
+
```typescript
|
|
16
|
+
import { invokeSafe, INVOKE_ERROR } from '$lib/utils/invokeSafe'
|
|
17
|
+
|
|
18
|
+
// ✅ 正确
|
|
19
|
+
const result = await invokeSafe('some_command', { param: value })
|
|
20
|
+
if (result === INVOKE_ERROR) return
|
|
21
|
+
|
|
22
|
+
// ❌ 禁止 — 直接 invoke
|
|
23
|
+
const result = await invoke('some_command', { param: value })
|
|
24
|
+
|
|
25
|
+
// ❌ 禁止 — 用 !result 判断错误
|
|
26
|
+
if (!result) // Ok(()) 是 null,会被误判
|
|
27
|
+
|
|
28
|
+
// ❌ 禁止 — 用 result === null 判断
|
|
29
|
+
if (result === null) // 同上
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### 判断错误的唯一正确方式
|
|
33
|
+
|
|
34
|
+
```typescript
|
|
35
|
+
// ✅ 唯一正确
|
|
36
|
+
if (result === INVOKE_ERROR) { /* 错误处理 */ }
|
|
37
|
+
|
|
38
|
+
// ❌ 禁止的所有写法
|
|
39
|
+
if (!result) // Ok(()) 是 null
|
|
40
|
+
if (result == null) // 宽松比较也会命中 null
|
|
41
|
+
if (result === null) // 明确 null 检查也错
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## 例外
|
|
45
|
+
|
|
46
|
+
只有不需要返回值的纯 UI 操作(如 `appWindow.close()`)可以不经过 invokeSafe。
|
|
47
|
+
|
|
48
|
+
## 验证
|
|
49
|
+
|
|
50
|
+
```typescript
|
|
51
|
+
// commit 前自审:搜索 invoke( 是否被直接使用
|
|
52
|
+
// grep -n "invoke(" src/**/*.svelte src/**/*.ts | grep -v "invokeSafe"
|
|
53
|
+
```
|
|
@@ -43,7 +43,7 @@ self-evolve.mdc(编排层 — 当前文件)
|
|
|
43
43
|
2. Rust:在 src-tauri 目录运行 cargo check(如果存在)
|
|
44
44
|
→ 失败 → 分析错误 → 修复 → 重试 cargo check → 最多 3 次
|
|
45
45
|
3. ★ 设计质量:如果修改涉及前端文件(html/css/jsx/tsx/vue/svelte),
|
|
46
|
-
|
|
46
|
+
调用 impeccable skill 检查设计质量(对话中输入 `impeccable detect`)
|
|
47
47
|
→ 发现 P0/P1 问题 → 修复 → 重新检测
|
|
48
48
|
→ P2/P3 问题 → 记入记忆,下次会话再处理
|
|
49
49
|
4. 全部通过 → 进入步骤 4
|
|
@@ -119,13 +119,13 @@ self-evolve.mdc(编排层 — 当前文件)
|
|
|
119
119
|
|
|
120
120
|
## 🔧 Impeccable 设计质量规则
|
|
121
121
|
|
|
122
|
-
>
|
|
122
|
+
> 技能位于 `.codebuddy/skills/impeccable/SKILL.md`。每次前端修改自动触发设计审计。
|
|
123
123
|
|
|
124
124
|
### 自动审计触发条件
|
|
125
125
|
|
|
126
126
|
```
|
|
127
127
|
触发时机:步骤 3(自动验证)中检测到前端文件改动
|
|
128
|
-
|
|
128
|
+
执行方式:对话中输入 impeccable detect 调用 skill
|
|
129
129
|
质量分级:
|
|
130
130
|
P0(阻断)→ 立即修复
|
|
131
131
|
P1(严重)→ 立即修复
|
|
@@ -146,7 +146,7 @@ self-evolve.mdc(编排层 — 当前文件)
|
|
|
146
146
|
|
|
147
147
|
### 设计上下文
|
|
148
148
|
|
|
149
|
-
首次使用前运行
|
|
149
|
+
首次使用前运行 `impeccable init`,生成 `PRODUCT.md` 和 `DESIGN.md` 作为设计上下文,让审计更精准。
|
|
150
150
|
|
|
151
151
|
## 记忆存储路径
|
|
152
152
|
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
---
|
|
2
|
+
description:
|
|
3
|
+
alwaysApply: true
|
|
4
|
+
enabled: true
|
|
5
|
+
updatedAt: 2026-05-11T07:40:04.494Z
|
|
6
|
+
provider:
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
*.rs 文件日志级别使用规范:
|
|
10
|
+
use log::{info, error, debug, warn};
|
|
11
|
+
|
|
12
|
+
info!():用于记录常规的运行信息,如服务启动、命令调用开始、任务执行成功等
|
|
13
|
+
error!():用于记录错误信息,如文件读取失败、数据解析失败、命令执行异常等
|
|
14
|
+
debug!():用于记录调试信息,在开发阶段使用,生产环境可关闭,如参数接收、关键变量打印等
|
|
15
|
+
warn!():用于记录警告信息,如非关键性问题、文件不存在、配置缺失等
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
---
|
|
2
|
+
description:
|
|
3
|
+
alwaysApply: true
|
|
4
|
+
enabled: true
|
|
5
|
+
updatedAt: 2026-05-11T07:37:36.959Z
|
|
6
|
+
provider:
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
你是Tauri + Vue3 + TypeScript + Rust项目的专属助手,所有输出必须严格遵守以下规范:
|
|
10
|
+
|
|
11
|
+
一、项目基础架构约定
|
|
12
|
+
- 技术栈:Tauri 2 + Vue 3 + TypeScript + Rust
|
|
13
|
+
- 前端:Vue 3 单文件组件,统一使用 <script setup lang="ts"> 组合式API
|
|
14
|
+
- 后端:Rust 命令,使用 #[tauri::command] 宏定义
|
|
15
|
+
- 前后端通信:仅使用 @tauri-apps/api/core 的 invoke 方法调用,禁止使用其他API
|
|
16
|
+
|
|
17
|
+
二、前端调用格式(强制)
|
|
18
|
+
1. 必须从 '@tauri-apps/api/core' 导入 invoke
|
|
19
|
+
2. 必须使用 await 异步调用,入参统一用对象包裹
|
|
20
|
+
3. 必须添加 try/catch 异常捕获
|
|
21
|
+
4. 固定模板:
|
|
22
|
+
import { invoke } from '@tauri-apps/api/core'
|
|
23
|
+
try {
|
|
24
|
+
const result = await invoke('rust_command_name', {
|
|
25
|
+
param1: value1,
|
|
26
|
+
param2: value2
|
|
27
|
+
})
|
|
28
|
+
// 成功逻辑
|
|
29
|
+
} catch (err) {
|
|
30
|
+
console.error('调用失败:', err)
|
|
31
|
+
// 错误处理
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
三、Rust后端命令规范(强制)
|
|
35
|
+
1. 必须用 #[tauri::command] 标记,函数必须 pub 公开
|
|
36
|
+
2. 函数参数名与前端 invoke 入参的 key 完全对应(蛇形命名)
|
|
37
|
+
3. 返回值统一用 Result<T, String>,成功返回 Ok(数据),失败返回 Err("错误信息")
|
|
38
|
+
4. 命令名与前端 invoke 第一个参数完全一致(蛇形命名)
|
|
39
|
+
5. 所有文件读写、系统操作、耗时逻辑必须放在 Rust 端,前端只做调用与UI渲染
|
|
40
|
+
|
|
41
|
+
四、命名与代码规范
|
|
42
|
+
1. 前端:变量/函数名用小驼峰 camelCase,类型/接口名用 PascalCase
|
|
43
|
+
2. Rust:函数/变量名用蛇形命名 snake_case,类型名用 PascalCase
|
|
44
|
+
3. 代码必须添加必要注释,禁止使用 any 类型
|
|
45
|
+
4. 生成前后端代码时,同时提供:前端调用示例 + Rust 命令实现 + main.rs 注册代码
|
|
46
|
+
|
|
47
|
+
五、输出要求
|
|
48
|
+
- 所有生成的代码必须可直接复制运行,无需额外修改格式
|
|
49
|
+
- 前后端参数、命名、类型必须完全对齐,避免类型错误
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: caveman
|
|
3
|
+
description: >
|
|
4
|
+
Ultra-compressed communication mode. Cuts token usage ~75% by dropping
|
|
5
|
+
filler, articles, and pleasantries while keeping full technical accuracy.
|
|
6
|
+
Use when user says "caveman mode", "talk like caveman", "use caveman",
|
|
7
|
+
"less tokens", "be brief", or invokes /caveman.
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
Respond terse like smart caveman. All technical substance stay. Only fluff die.
|
|
11
|
+
|
|
12
|
+
## Persistence
|
|
13
|
+
|
|
14
|
+
ACTIVE EVERY RESPONSE once triggered. No revert after many turns. No filler drift. Still active if unsure. Off only when user says "stop caveman" or "normal mode".
|
|
15
|
+
|
|
16
|
+
## Rules
|
|
17
|
+
|
|
18
|
+
Drop: articles (a/an/the), filler (just/really/basically/actually/simply), pleasantries (sure/certainly/of course/happy to), hedging. Fragments OK. Short synonyms (big not extensive, fix not "implement a solution for"). Abbreviate common terms (DB/auth/config/req/res/fn/impl). Strip conjunctions. Use arrows for causality (X -> Y). One word when one word enough.
|
|
19
|
+
|
|
20
|
+
Technical terms stay exact. Code blocks unchanged. Errors quoted exact.
|
|
21
|
+
|
|
22
|
+
Pattern: `[thing] [action] [reason]. [next step].`
|
|
23
|
+
|
|
24
|
+
Not: "Sure! I'd be happy to help you with that. The issue you're experiencing is likely caused by..."
|
|
25
|
+
Yes: "Bug in auth middleware. Token expiry check use `<` not `<=`. Fix:"
|
|
26
|
+
|
|
27
|
+
### Examples
|
|
28
|
+
|
|
29
|
+
**"Why React component re-render?"**
|
|
30
|
+
|
|
31
|
+
> Inline obj prop -> new ref -> re-render. `useMemo`.
|
|
32
|
+
|
|
33
|
+
**"Explain database connection pooling."**
|
|
34
|
+
|
|
35
|
+
> Pool = reuse DB conn. Skip handshake -> fast under load.
|
|
36
|
+
|
|
37
|
+
## Auto-Clarity Exception
|
|
38
|
+
|
|
39
|
+
Drop caveman temporarily for: security warnings, irreversible action confirmations, multi-step sequences where fragment order risks misread, user asks to clarify or repeats question. Resume caveman after clear part done.
|
|
40
|
+
|
|
41
|
+
Example -- destructive op:
|
|
42
|
+
|
|
43
|
+
> **Warning:** This will permanently delete all rows in the `users` table and cannot be undone.
|
|
44
|
+
>
|
|
45
|
+
> ```sql
|
|
46
|
+
> DROP TABLE users;
|
|
47
|
+
> ```
|
|
48
|
+
>
|
|
49
|
+
> Caveman resume. Verify backup exist first.
|