@mison/ag-kit-cn 2.0.1

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.
Files changed (237) hide show
  1. package/.agent/.shared/ui-ux-pro-max/data/charts.csv +26 -0
  2. package/.agent/.shared/ui-ux-pro-max/data/colors.csv +97 -0
  3. package/.agent/.shared/ui-ux-pro-max/data/icons.csv +101 -0
  4. package/.agent/.shared/ui-ux-pro-max/data/landing.csv +31 -0
  5. package/.agent/.shared/ui-ux-pro-max/data/products.csv +97 -0
  6. package/.agent/.shared/ui-ux-pro-max/data/prompts.csv +24 -0
  7. package/.agent/.shared/ui-ux-pro-max/data/react-performance.csv +45 -0
  8. package/.agent/.shared/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
  9. package/.agent/.shared/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
  10. package/.agent/.shared/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
  11. package/.agent/.shared/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
  12. package/.agent/.shared/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
  13. package/.agent/.shared/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
  14. package/.agent/.shared/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
  15. package/.agent/.shared/ui-ux-pro-max/data/stacks/react.csv +54 -0
  16. package/.agent/.shared/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
  17. package/.agent/.shared/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
  18. package/.agent/.shared/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
  19. package/.agent/.shared/ui-ux-pro-max/data/stacks/vue.csv +50 -0
  20. package/.agent/.shared/ui-ux-pro-max/data/styles.csv +59 -0
  21. package/.agent/.shared/ui-ux-pro-max/data/typography.csv +58 -0
  22. package/.agent/.shared/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
  23. package/.agent/.shared/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
  24. package/.agent/.shared/ui-ux-pro-max/data/web-interface.csv +31 -0
  25. package/.agent/.shared/ui-ux-pro-max/scripts/core.py +258 -0
  26. package/.agent/.shared/ui-ux-pro-max/scripts/design_system.py +1067 -0
  27. package/.agent/.shared/ui-ux-pro-max/scripts/search.py +106 -0
  28. package/.agent/ARCHITECTURE.md +285 -0
  29. package/.agent/agents/backend-specialist.md +268 -0
  30. package/.agent/agents/code-archaeologist.md +106 -0
  31. package/.agent/agents/database-architect.md +225 -0
  32. package/.agent/agents/debugger.md +225 -0
  33. package/.agent/agents/devops-engineer.md +242 -0
  34. package/.agent/agents/documentation-writer.md +104 -0
  35. package/.agent/agents/explorer-agent.md +73 -0
  36. package/.agent/agents/frontend-specialist.md +618 -0
  37. package/.agent/agents/game-developer.md +162 -0
  38. package/.agent/agents/mobile-developer.md +382 -0
  39. package/.agent/agents/orchestrator.md +438 -0
  40. package/.agent/agents/penetration-tester.md +188 -0
  41. package/.agent/agents/performance-optimizer.md +187 -0
  42. package/.agent/agents/product-manager.md +112 -0
  43. package/.agent/agents/product-owner.md +95 -0
  44. package/.agent/agents/project-planner.md +405 -0
  45. package/.agent/agents/qa-automation-engineer.md +103 -0
  46. package/.agent/agents/security-auditor.md +170 -0
  47. package/.agent/agents/seo-specialist.md +111 -0
  48. package/.agent/agents/test-engineer.md +158 -0
  49. package/.agent/mcp_config.json +12 -0
  50. package/.agent/rules/GEMINI.md +273 -0
  51. package/.agent/scripts/auto_preview.py +148 -0
  52. package/.agent/scripts/checklist.py +217 -0
  53. package/.agent/scripts/session_manager.py +120 -0
  54. package/.agent/scripts/verify_all.py +327 -0
  55. package/.agent/skills/api-patterns/SKILL.md +84 -0
  56. package/.agent/skills/api-patterns/api-style.md +42 -0
  57. package/.agent/skills/api-patterns/auth.md +24 -0
  58. package/.agent/skills/api-patterns/documentation.md +26 -0
  59. package/.agent/skills/api-patterns/graphql.md +41 -0
  60. package/.agent/skills/api-patterns/rate-limiting.md +31 -0
  61. package/.agent/skills/api-patterns/response.md +37 -0
  62. package/.agent/skills/api-patterns/rest.md +40 -0
  63. package/.agent/skills/api-patterns/scripts/api_validator.py +211 -0
  64. package/.agent/skills/api-patterns/security-testing.md +122 -0
  65. package/.agent/skills/api-patterns/trpc.md +41 -0
  66. package/.agent/skills/api-patterns/versioning.md +22 -0
  67. package/.agent/skills/app-builder/SKILL.md +75 -0
  68. package/.agent/skills/app-builder/agent-coordination.md +74 -0
  69. package/.agent/skills/app-builder/feature-building.md +53 -0
  70. package/.agent/skills/app-builder/project-detection.md +34 -0
  71. package/.agent/skills/app-builder/scaffolding.md +118 -0
  72. package/.agent/skills/app-builder/tech-stack.md +40 -0
  73. package/.agent/skills/app-builder/templates/SKILL.md +39 -0
  74. package/.agent/skills/app-builder/templates/astro-static/TEMPLATE.md +76 -0
  75. package/.agent/skills/app-builder/templates/chrome-extension/TEMPLATE.md +92 -0
  76. package/.agent/skills/app-builder/templates/cli-tool/TEMPLATE.md +88 -0
  77. package/.agent/skills/app-builder/templates/electron-desktop/TEMPLATE.md +88 -0
  78. package/.agent/skills/app-builder/templates/express-api/TEMPLATE.md +83 -0
  79. package/.agent/skills/app-builder/templates/flutter-app/TEMPLATE.md +90 -0
  80. package/.agent/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +90 -0
  81. package/.agent/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +122 -0
  82. package/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +122 -0
  83. package/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +169 -0
  84. package/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +134 -0
  85. package/.agent/skills/app-builder/templates/python-fastapi/TEMPLATE.md +83 -0
  86. package/.agent/skills/app-builder/templates/react-native-app/TEMPLATE.md +119 -0
  87. package/.agent/skills/architecture/SKILL.md +57 -0
  88. package/.agent/skills/architecture/context-discovery.md +43 -0
  89. package/.agent/skills/architecture/examples.md +94 -0
  90. package/.agent/skills/architecture/pattern-selection.md +68 -0
  91. package/.agent/skills/architecture/patterns-reference.md +50 -0
  92. package/.agent/skills/architecture/trade-off-analysis.md +77 -0
  93. package/.agent/skills/bash-linux/SKILL.md +201 -0
  94. package/.agent/skills/behavioral-modes/SKILL.md +264 -0
  95. package/.agent/skills/brainstorming/SKILL.md +164 -0
  96. package/.agent/skills/brainstorming/dynamic-questioning.md +359 -0
  97. package/.agent/skills/clean-code/SKILL.md +200 -0
  98. package/.agent/skills/code-review-checklist/SKILL.md +125 -0
  99. package/.agent/skills/database-design/SKILL.md +54 -0
  100. package/.agent/skills/database-design/database-selection.md +43 -0
  101. package/.agent/skills/database-design/indexing.md +39 -0
  102. package/.agent/skills/database-design/migrations.md +50 -0
  103. package/.agent/skills/database-design/optimization.md +36 -0
  104. package/.agent/skills/database-design/orm-selection.md +30 -0
  105. package/.agent/skills/database-design/schema-design.md +56 -0
  106. package/.agent/skills/database-design/scripts/schema_validator.py +172 -0
  107. package/.agent/skills/deployment-procedures/SKILL.md +241 -0
  108. package/.agent/skills/doc.md +177 -0
  109. package/.agent/skills/documentation-templates/SKILL.md +194 -0
  110. package/.agent/skills/frontend-design/SKILL.md +418 -0
  111. package/.agent/skills/frontend-design/animation-guide.md +331 -0
  112. package/.agent/skills/frontend-design/color-system.md +307 -0
  113. package/.agent/skills/frontend-design/decision-trees.md +418 -0
  114. package/.agent/skills/frontend-design/motion-graphics.md +306 -0
  115. package/.agent/skills/frontend-design/scripts/accessibility_checker.py +183 -0
  116. package/.agent/skills/frontend-design/scripts/ux_audit.py +727 -0
  117. package/.agent/skills/frontend-design/typography-system.md +345 -0
  118. package/.agent/skills/frontend-design/ux-psychology.md +1118 -0
  119. package/.agent/skills/frontend-design/visual-effects.md +383 -0
  120. package/.agent/skills/game-development/2d-games/SKILL.md +119 -0
  121. package/.agent/skills/game-development/3d-games/SKILL.md +135 -0
  122. package/.agent/skills/game-development/SKILL.md +167 -0
  123. package/.agent/skills/game-development/game-art/SKILL.md +185 -0
  124. package/.agent/skills/game-development/game-audio/SKILL.md +190 -0
  125. package/.agent/skills/game-development/game-design/SKILL.md +129 -0
  126. package/.agent/skills/game-development/mobile-games/SKILL.md +108 -0
  127. package/.agent/skills/game-development/multiplayer/SKILL.md +132 -0
  128. package/.agent/skills/game-development/pc-games/SKILL.md +144 -0
  129. package/.agent/skills/game-development/vr-ar/SKILL.md +123 -0
  130. package/.agent/skills/game-development/web-games/SKILL.md +150 -0
  131. package/.agent/skills/geo-fundamentals/SKILL.md +155 -0
  132. package/.agent/skills/geo-fundamentals/scripts/geo_checker.py +289 -0
  133. package/.agent/skills/i18n-localization/SKILL.md +154 -0
  134. package/.agent/skills/i18n-localization/scripts/i18n_checker.py +241 -0
  135. package/.agent/skills/intelligent-routing/SKILL.md +335 -0
  136. package/.agent/skills/lint-and-validate/SKILL.md +44 -0
  137. package/.agent/skills/lint-and-validate/scripts/lint_runner.py +184 -0
  138. package/.agent/skills/lint-and-validate/scripts/type_coverage.py +173 -0
  139. package/.agent/skills/mcp-builder/SKILL.md +176 -0
  140. package/.agent/skills/mobile-design/SKILL.md +394 -0
  141. package/.agent/skills/mobile-design/decision-trees.md +516 -0
  142. package/.agent/skills/mobile-design/mobile-backend.md +491 -0
  143. package/.agent/skills/mobile-design/mobile-color-system.md +420 -0
  144. package/.agent/skills/mobile-design/mobile-debugging.md +122 -0
  145. package/.agent/skills/mobile-design/mobile-design-thinking.md +355 -0
  146. package/.agent/skills/mobile-design/mobile-navigation.md +458 -0
  147. package/.agent/skills/mobile-design/mobile-performance.md +767 -0
  148. package/.agent/skills/mobile-design/mobile-testing.md +356 -0
  149. package/.agent/skills/mobile-design/mobile-typography.md +432 -0
  150. package/.agent/skills/mobile-design/platform-android.md +666 -0
  151. package/.agent/skills/mobile-design/platform-ios.md +561 -0
  152. package/.agent/skills/mobile-design/scripts/mobile_audit.py +670 -0
  153. package/.agent/skills/mobile-design/touch-psychology.md +537 -0
  154. package/.agent/skills/nextjs-react-expert/1-async-eliminating-waterfalls.md +311 -0
  155. package/.agent/skills/nextjs-react-expert/2-bundle-bundle-size-optimization.md +241 -0
  156. package/.agent/skills/nextjs-react-expert/3-server-server-side-performance.md +489 -0
  157. package/.agent/skills/nextjs-react-expert/4-client-client-side-data-fetching.md +263 -0
  158. package/.agent/skills/nextjs-react-expert/5-rerender-re-render-optimization.md +581 -0
  159. package/.agent/skills/nextjs-react-expert/6-rendering-rendering-performance.md +431 -0
  160. package/.agent/skills/nextjs-react-expert/7-js-javascript-performance.md +683 -0
  161. package/.agent/skills/nextjs-react-expert/8-advanced-advanced-patterns.md +149 -0
  162. package/.agent/skills/nextjs-react-expert/SKILL.md +286 -0
  163. package/.agent/skills/nextjs-react-expert/scripts/convert_rules.py +222 -0
  164. package/.agent/skills/nextjs-react-expert/scripts/react_performance_checker.py +252 -0
  165. package/.agent/skills/nodejs-best-practices/SKILL.md +333 -0
  166. package/.agent/skills/parallel-agents/SKILL.md +194 -0
  167. package/.agent/skills/performance-profiling/SKILL.md +149 -0
  168. package/.agent/skills/performance-profiling/scripts/lighthouse_audit.py +76 -0
  169. package/.agent/skills/plan-writing/SKILL.md +152 -0
  170. package/.agent/skills/powershell-windows/SKILL.md +166 -0
  171. package/.agent/skills/python-patterns/SKILL.md +441 -0
  172. package/.agent/skills/red-team-tactics/SKILL.md +203 -0
  173. package/.agent/skills/rust-pro/SKILL.md +190 -0
  174. package/.agent/skills/seo-fundamentals/SKILL.md +135 -0
  175. package/.agent/skills/seo-fundamentals/scripts/seo_checker.py +215 -0
  176. package/.agent/skills/server-management/SKILL.md +161 -0
  177. package/.agent/skills/systematic-debugging/SKILL.md +114 -0
  178. package/.agent/skills/tailwind-patterns/SKILL.md +269 -0
  179. package/.agent/skills/tdd-workflow/SKILL.md +149 -0
  180. package/.agent/skills/testing-patterns/SKILL.md +178 -0
  181. package/.agent/skills/testing-patterns/scripts/test_runner.py +219 -0
  182. package/.agent/skills/vulnerability-scanner/SKILL.md +276 -0
  183. package/.agent/skills/vulnerability-scanner/checklists.md +131 -0
  184. package/.agent/skills/vulnerability-scanner/scripts/security_scan.py +459 -0
  185. package/.agent/skills/web-design-guidelines/SKILL.md +57 -0
  186. package/.agent/skills/webapp-testing/SKILL.md +187 -0
  187. package/.agent/skills/webapp-testing/scripts/playwright_runner.py +173 -0
  188. package/.agent/workflows/brainstorm.md +113 -0
  189. package/.agent/workflows/create.md +59 -0
  190. package/.agent/workflows/debug.md +103 -0
  191. package/.agent/workflows/deploy.md +176 -0
  192. package/.agent/workflows/enhance.md +63 -0
  193. package/.agent/workflows/orchestrate.md +242 -0
  194. package/.agent/workflows/plan.md +89 -0
  195. package/.agent/workflows/preview.md +80 -0
  196. package/.agent/workflows/restore-localize-compat.md +525 -0
  197. package/.agent/workflows/status.md +86 -0
  198. package/.agent/workflows/test.md +144 -0
  199. package/.agent/workflows/ui-ux-pro-max.md +295 -0
  200. package/AGENT_FLOW.md +609 -0
  201. package/CHANGELOG.md +68 -0
  202. package/LICENSE +21 -0
  203. package/README.md +260 -0
  204. package/bin/adapters/base.js +63 -0
  205. package/bin/adapters/codex.js +391 -0
  206. package/bin/adapters/gemini.js +137 -0
  207. package/bin/ag-kit.js +1336 -0
  208. package/bin/core/builder.js +80 -0
  209. package/bin/core/generator.js +59 -0
  210. package/bin/core/resource-loader.js +64 -0
  211. package/bin/core/transformer.js +208 -0
  212. package/bin/interactive.js +65 -0
  213. package/bin/utils/atomic-writer.js +97 -0
  214. package/bin/utils/git-helper.js +68 -0
  215. package/bin/utils/managed-block.js +65 -0
  216. package/bin/utils/manifest.js +241 -0
  217. package/bin/utils.js +82 -0
  218. package/docs/codex-rules-template.md +36 -0
  219. package/docs/mapping-spec.md +68 -0
  220. package/docs/multi-target-adapter.md +80 -0
  221. package/docs/official/README.md +53 -0
  222. package/docs/official/antigravity/agent-modes-settings.md +64 -0
  223. package/docs/official/antigravity/rules-workflows.md +96 -0
  224. package/docs/official/antigravity/skills.md +147 -0
  225. package/docs/official/codex/agents-md.md +119 -0
  226. package/docs/official/codex/config-advanced.md +358 -0
  227. package/docs/official/codex/config-basic.md +141 -0
  228. package/docs/official/codex/config-reference.md +223 -0
  229. package/docs/official/codex/config-sample.md +216 -0
  230. package/docs/official/codex/mcp.md +107 -0
  231. package/docs/official/codex/rules.md +79 -0
  232. package/docs/official/codex/skills.md +114 -0
  233. package/docs/official/sources-index.md +32 -0
  234. package/docs/operations.md +145 -0
  235. package/docs/terminology-style-guide.md +69 -0
  236. package/package.json +51 -0
  237. package/scripts/postinstall-check.js +112 -0
@@ -0,0 +1,166 @@
1
+ ---
2
+ name: powershell-windows
3
+ description: PowerShell(任务自动化和配置管理框架)Windows 模式。包含关键陷阱、运算符语法(Operator Syntax)和错误处理。
4
+ allowed-tools: Read, Write, Edit, Glob, Grep, Bash
5
+ ---
6
+
7
+ # PowerShell Windows 实践模式
8
+
9
+ > 针对 Windows PowerShell 的核心模式与关键陷阱。
10
+
11
+ ---
12
+
13
+ ## 1. 运算符语法规则
14
+
15
+ ### 关键:必须使用圆括号(Parentheses)
16
+
17
+ | ❌ 错误做法 | ✅ 正确做法 |
18
+ | -------------------------------------- | ------------------------------------------ |
19
+ | `if (Test-Path "a" -or Test-Path "b")` | `if ((Test-Path "a") -or (Test-Path "b"))` |
20
+ | `if (Get-Item $x -and $y -eq 5)` | `if ((Get-Item $x) -and ($y -eq 5))` |
21
+
22
+ **准则:** 在使用逻辑运算符时,每一个 Cmdlet(命令)的调用**必须**封装在圆括号内。
23
+
24
+ ---
25
+
26
+ ## 2. Unicode(统一码)/Emoji(表情符号)限制
27
+
28
+ ### 关键:脚本中严禁使用 Unicode
29
+
30
+ | 用途 | ❌ 禁止使用 | ✅ 推荐使用 |
31
+ | ---- | ----------- | ----------- |
32
+ | 成功 | ✅ ✓ | [OK] [+] |
33
+ | 错误 | ❌ ✗ 🔴 | [!] [X] |
34
+ | 警告 | ⚠️ 🟡 | [*] [WARN] |
35
+ | 信息 | ℹ️ 🔵 | [i] [INFO] |
36
+ | 进度 | ⏳ | [...] |
37
+
38
+ **准则:** 在 PowerShell 脚本中仅使用 ASCII(ASCII 码)字符。
39
+
40
+ ---
41
+
42
+ ## 3. 空值检查模式
43
+
44
+ ### 在访问前始终检查
45
+
46
+ | ❌ 错误做法 | ✅ 正确做法 |
47
+ | -------------------- | -------------------------------- |
48
+ | `$array.Count -gt 0` | `$array -and $array.Count -gt 0` |
49
+ | `$text.Length` | `if ($text) { $text.Length }` |
50
+
51
+ ---
52
+
53
+ ## 4. 字符串内插(Interpolation)
54
+
55
+ ### 复杂表达式的处理
56
+
57
+ **推荐做法:** 先存储到变量中,再进行内插。
58
+
59
+ ```powershell
60
+ $value = $obj.prop.sub
61
+ Write-Output "Value: $value"
62
+ ```
63
+
64
+ ---
65
+
66
+ ## 5. 错误处理
67
+
68
+ ### ErrorActionPreference(错误处理偏好)配置
69
+
70
+ | 取值 | 使用场景 |
71
+ | ---------------- | -------------------- |
72
+ | Stop | 开发阶段(快速失败) |
73
+ | Continue | 生产环境脚本 |
74
+ | SilentlyContinue | 预期可能会发生错误时 |
75
+
76
+ ### Try/Catch(错误捕获)最佳实践
77
+
78
+ - 不要在 try 块内部直接返回。
79
+ - 始终使用 finally 块进行资源清理。
80
+ - 在 try/catch 结构之后再执行返回操作。
81
+
82
+ ---
83
+
84
+ ## 6. 文件路径处理
85
+
86
+ ### Windows 路径规则
87
+
88
+ | 模式 | 用途 |
89
+ | ---------- | --------------------------------------- |
90
+ | 字面量路径 | `C:\Users\User\file.txt` |
91
+ | 变量路径 | `Join-Path $env:USERPROFILE "file.txt"` |
92
+ | 相对路径 | `Join-Path $ScriptDir "data"` |
93
+
94
+ **准则:** 使用 `Join-Path` 以确保跨平台的路径安全性。
95
+
96
+ ---
97
+
98
+ ## 7. 数组操作
99
+
100
+ ### 正确的语法模式
101
+
102
+ | 操作项 | 语法 |
103
+ | -------------- | ------------------------------ |
104
+ | 空数组 | `$array = @()` |
105
+ | 添加元素 | `$array += $item` |
106
+ | ArrayList 添加 | `$list.Add($item) \| Out-Null` |
107
+
108
+ ---
109
+
110
+ ## 8. JSON(数据交换格式)操作
111
+
112
+ ### 关键:深度参数(Depth Parameter)
113
+
114
+ | ❌ 错误做法 | ✅ 正确做法 |
115
+ | ---------------- | -------------------------- |
116
+ | `ConvertTo-Json` | `ConvertTo-Json -Depth 10` |
117
+
118
+ **准则:** 处理嵌套对象时,务必显式指定 `-Depth`。
119
+
120
+ ### 文件读写操作
121
+
122
+ | 操作项 | 模式 |
123
+ | ------ | ------------------------------------------------------------------- |
124
+ | 读取 | `Get-Content "file.json" -Raw \| ConvertFrom-Json` |
125
+ | 写入 | `$data \| ConvertTo-Json -Depth 10 \| Out-File "file.json" -Encoding UTF8` |
126
+
127
+ ---
128
+
129
+ ## 9. 常见错误速查
130
+
131
+ | 错误消息 | 原因 | 修复方案 |
132
+ | ---------------------- | ----------------- | ----------------------- |
133
+ | "parameter 'or'" | 缺失圆括号 | 使用 () 封装 Cmdlet |
134
+ | "Unexpected token" | 存在 Unicode 字符 | 仅保留 ASCII 字符 |
135
+ | "Cannot find property" | 对象为空(Null) | 先执行空值检查 |
136
+ | "Cannot convert" | 类型不匹配 | 使用 `.ToString()` 转换 |
137
+
138
+ ---
139
+
140
+ ## 10. 脚本模板
141
+
142
+ ```powershell
143
+ # 开启严格模式
144
+ Set-StrictMode -Version Latest
145
+ $ErrorActionPreference = "Continue"
146
+
147
+ # 路径初始化
148
+ $ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
149
+
150
+ # 主程序逻辑
151
+ try {
152
+ # 在此处编写业务逻辑
153
+ Write-Output "[OK] Done"
154
+ exit 0
155
+ }
156
+ catch {
157
+ Write-Warning "Error: $_"
158
+ exit 1
159
+ }
160
+ ```
161
+
162
+ ---
163
+
164
+ > **谨记:** PowerShell 具有独特的语法规则。圆括号的使用、仅限 ASCII 以及空值检查是不可逾越的底线。
165
+
166
+ ---
@@ -0,0 +1,441 @@
1
+ ---
2
+ name: python-patterns
3
+ description: Python(编程语言)开发原则与决策方法。覆盖框架选型、异步模式、类型标注与项目结构。强调思考而非照抄。
4
+ allowed-tools: Read, Write, Edit, Glob, Grep
5
+ ---
6
+
7
+ # Python 模式
8
+
9
+ > 面向 2025 的 Python 开发原则与决策方法。
10
+ > **学习如何思考,不要只记模式。**
11
+
12
+ ---
13
+
14
+ ## ⚠️ 本技能使用方式
15
+
16
+ 本技能强调**决策原则**,不是固定代码模板。
17
+
18
+ - 需求不明确时,先询问用户框架偏好
19
+ - 根据 Context(上下文)决定 async(异步)或 sync(同步)
20
+ - 不要每次都默认同一框架
21
+
22
+ ---
23
+
24
+ ## 1. 框架选型(2025)
25
+
26
+ ### 决策树
27
+
28
+ ```
29
+ 你要构建什么?
30
+
31
+ ├── API 优先(API-first)/ 微服务
32
+ │ └── FastAPI(async、现代、速度快)
33
+
34
+ ├── 全栈 Web / CMS / 管理后台
35
+ │ └── Django(开箱即用,batteries-included)
36
+
37
+ ├── 简单应用 / 脚本 / 学习
38
+ │ └── Flask(极简、灵活)
39
+
40
+ ├── AI/ML API 服务化
41
+ │ └── FastAPI(Pydantic、async、Uvicorn)
42
+
43
+ └── 后台任务
44
+ └── Celery + 任意 Web 框架
45
+ ```
46
+
47
+ ### 对比原则
48
+
49
+ | 维度 | FastAPI | Django | Flask |
50
+ |------|---------|--------|-------|
51
+ | **适用场景** | API、微服务 | 全栈、CMS | 简单项目、学习 |
52
+ | **异步支持** | 原生支持 | Django 5.0+ | 依赖扩展 |
53
+ | **管理后台** | 手动构建 | 内置 Admin(管理后台) | 依赖扩展 |
54
+ | **ORM(对象关系映射)** | 自由选择 | Django ORM | 自由选择 |
55
+ | **学习曲线** | 低 | 中 | 低 |
56
+
57
+ ### 选型前必须询问:
58
+ 1. 是纯 API 还是全栈应用?
59
+ 2. 是否需要后台管理界面?
60
+ 3. 团队是否熟悉 async?
61
+ 4. 是否有现有基础设施约束?
62
+
63
+ ---
64
+
65
+ ## 2. 异步与同步决策
66
+
67
+ ### 何时使用异步(async)
68
+
69
+ ```
70
+ async def(异步函数)更适合:
71
+ ├── I/O 密集操作(数据库、HTTP、文件)
72
+ ├── 大量并发连接
73
+ ├── 实时交互场景
74
+ ├── 微服务通信
75
+ └── FastAPI/Starlette/Django ASGI(异步服务器网关接口)
76
+
77
+ def(同步函数)更适合:
78
+ ├── CPU 密集操作
79
+ ├── 简单脚本
80
+ ├── 遗留代码库
81
+ ├── 团队不熟悉 async
82
+ └── 依赖阻塞型库(无 async 版本)
83
+ ```
84
+
85
+ ### 黄金法则
86
+
87
+ ```
88
+ I/O bound(I/O 密集)→ async(等待外部资源)
89
+ CPU bound(CPU 密集)→ sync + multiprocessing(本地计算)
90
+
91
+ 不要:
92
+ ├── 随意混用 sync 与 async
93
+ ├── 在 async 代码里调用阻塞库
94
+ └── 为 CPU 任务强行上 async
95
+ ```
96
+
97
+ ### 异步库选型
98
+
99
+ | 需求 | 异步库 |
100
+ |------|--------|
101
+ | HTTP 客户端 | httpx |
102
+ | PostgreSQL | asyncpg |
103
+ | Redis(内存数据库) | aioredis / redis-py async |
104
+ | 文件 I/O | aiofiles |
105
+ | 数据库 ORM | SQLAlchemy 2.0 async, Tortoise |
106
+
107
+ ---
108
+
109
+ ## 3. 类型标注策略
110
+
111
+ ### 哪些地方要标注
112
+
113
+ ```
114
+ 必须标注:
115
+ ├── 函数参数
116
+ ├── 返回类型
117
+ ├── 类属性
118
+ ├── 对外公开 API
119
+
120
+ 可省略:
121
+ ├── 局部变量(让推断工作)
122
+ ├── 一次性脚本
123
+ ├── 测试代码(通常可选)
124
+ ```
125
+
126
+ ### 常见类型模式
127
+
128
+ ```python
129
+ # 下面是模式示例,请理解其语义:
130
+
131
+ # Optional(可选)→ 可能为 None
132
+ from typing import Optional
133
+ def find_user(id: int) -> Optional[User]: ...
134
+
135
+ # Union(联合类型)→ 多类型之一
136
+ def process(data: str | dict) -> None: ...
137
+
138
+ # 泛型集合
139
+ def get_items() -> list[Item]: ...
140
+ def get_mapping() -> dict[str, int]: ...
141
+
142
+ # Callable(可调用)
143
+ from typing import Callable
144
+ def apply(fn: Callable[[int], str]) -> str: ...
145
+ ```
146
+
147
+ ### 用 Pydantic(数据校验库)做校验
148
+
149
+ ```
150
+ 适用场景:
151
+ ├── API 请求/响应模型
152
+ ├── 配置与 settings
153
+ ├── 数据校验
154
+ ├── 序列化
155
+
156
+ 收益:
157
+ ├── 运行时校验
158
+ ├── 自动生成 JSON Schema(JSON 模式)
159
+ ├── 与 FastAPI 原生协同
160
+ └── 清晰错误提示
161
+ ```
162
+
163
+ ---
164
+
165
+ ## 4. 项目结构原则
166
+
167
+ ### 结构选择
168
+
169
+ ```
170
+ 小项目 / 脚本:
171
+ ├── main.py
172
+ ├── utils.py
173
+ └── requirements.txt
174
+
175
+ 中型 API:
176
+ ├── app/
177
+ │ ├── __init__.py
178
+ │ ├── main.py
179
+ │ ├── models/
180
+ │ ├── routes/
181
+ │ ├── services/
182
+ │ └── schemas/
183
+ ├── tests/
184
+ └── pyproject.toml
185
+
186
+ 大型应用:
187
+ ├── src/
188
+ │ └── myapp/
189
+ │ ├── core/
190
+ │ ├── api/
191
+ │ ├── services/
192
+ │ ├── models/
193
+ │ └── ...
194
+ ├── tests/
195
+ └── pyproject.toml
196
+ ```
197
+
198
+ ### FastAPI 结构原则
199
+
200
+ ```
201
+ 可按“分层”或“按功能”组织:
202
+
203
+ 按分层:
204
+ ├── routes/(API 端点)
205
+ ├── services/(业务逻辑)
206
+ ├── models/(数据库模型)
207
+ ├── schemas/(Pydantic 模型)
208
+ └── dependencies/(共享依赖)
209
+
210
+ 按功能:
211
+ ├── users/
212
+ │ ├── routes.py
213
+ │ ├── service.py
214
+ │ └── schemas.py
215
+ └── products/
216
+ └── ...
217
+ ```
218
+
219
+ ---
220
+
221
+ ## 5. Django 原则(2025)
222
+
223
+ ### Django 异步能力(Django 5.0+)
224
+
225
+ ```
226
+ Django 已支持 async(异步):
227
+ ├── 异步视图(Async views)
228
+ ├── 异步中间件(Async middleware)
229
+ ├── 异步 ORM(部分能力)
230
+ └── ASGI 部署
231
+
232
+ Django 中适合 async(异步)的场景:
233
+ ├── 调用外部 API
234
+ ├── WebSocket(Channels)
235
+ ├── 高并发视图
236
+ └── 触发后台任务
237
+ ```
238
+
239
+ ### Django 最佳实践
240
+
241
+ ```
242
+ 模型设计:
243
+ ├── 模型肥、视图薄(Fat models, thin views)
244
+ ├── 通过 manager 抽共用查询
245
+ ├── 共享字段放抽象基类
246
+
247
+ 视图选择:
248
+ ├── 复杂 CRUD 用类视图(class-based views)
249
+ ├── 简单接口用函数视图(function-based views)
250
+ ├── DRF(Django REST Framework)场景可用 viewsets(视图集)
251
+
252
+ 查询优化:
253
+ ├── 外键用 select_related()
254
+ ├── 多对多用 prefetch_related()
255
+ ├── 避免 N+1 查询
256
+ └── 用 .only() 限定字段
257
+ ```
258
+
259
+ ---
260
+
261
+ ## 6. FastAPI 原则
262
+
263
+ ### FastAPI 中 `async def` 与 `def` 的选择
264
+
265
+ ```
266
+ 适用 async def:
267
+ ├── 使用 async 数据库驱动
268
+ ├── 发起 async HTTP 调用
269
+ ├── I/O 密集操作
270
+ └── 需要高并发吞吐
271
+
272
+ 适用 def:
273
+ ├── 阻塞型操作
274
+ ├── sync 数据库驱动
275
+ ├── CPU 密集任务
276
+ └── FastAPI 会自动放入线程池执行
277
+ ```
278
+
279
+ ### 依赖注入
280
+
281
+ ```
282
+ 依赖注入(Dependency Injection)适用:
283
+ ├── 数据库会话
284
+ ├── 当前用户 / 鉴权
285
+ ├── 配置对象
286
+ ├── 共享资源
287
+
288
+ 收益:
289
+ ├── 可测试性提升(可 mock/模拟)
290
+ ├── 职责清晰分离
291
+ ├── 可自动清理资源(yield)
292
+ ```
293
+
294
+ ### Pydantic v2 集成
295
+
296
+ ```python
297
+ # FastAPI 与 Pydantic 深度集成:
298
+
299
+ # 请求校验
300
+ @app.post("/users")
301
+ async def create(user: UserCreate) -> UserResponse:
302
+ # user 在进入业务前已完成校验
303
+ ...
304
+
305
+ # 响应序列化
306
+ # 返回类型会成为响应 schema
307
+ ```
308
+
309
+ ---
310
+
311
+ ## 7. 后台任务
312
+
313
+ ### 方案选择指南
314
+
315
+ | 方案 | 适用场景 |
316
+ |------|----------|
317
+ | **BackgroundTasks** | 简单、进程内任务 |
318
+ | **Celery** | 分布式、复杂工作流 |
319
+ | **ARQ** | 异步 + Redis |
320
+ | **RQ** | 简单 Redis 队列 |
321
+ | **Dramatiq** | Actor 模式,比 Celery 更轻量 |
322
+
323
+ ### 各方案适用场景
324
+
325
+ ```
326
+ FastAPI BackgroundTasks:
327
+ ├── 短平快任务
328
+ ├── 不要求持久化
329
+ ├── 即发即忘(Fire-and-forget)
330
+ └── 与 Web 进程同进程运行
331
+
332
+ Celery/ARQ:
333
+ ├── 长耗时任务
334
+ ├── 需要重试机制
335
+ ├── 分布式 worker(执行进程)
336
+ ├── 持久化队列
337
+ └── 复杂工作流
338
+ ```
339
+
340
+ ---
341
+
342
+ ## 8. 错误处理原则
343
+
344
+ ### 异常策略
345
+
346
+ ```
347
+ 在 FastAPI 中:
348
+ ├── 定义自定义异常类
349
+ ├── 注册统一异常处理器
350
+ ├── 返回一致的错误格式
351
+ └── 记录日志但不暴露内部细节
352
+
353
+ 推荐模式:
354
+ ├── service 层抛领域异常
355
+ ├── handler 层转换为 HTTP 响应
356
+ └── 客户端收到干净错误对象
357
+ ```
358
+
359
+ ### 错误响应原则
360
+
361
+ ```
362
+ 应包含:
363
+ ├── 错误码(Error code,用于程序处理)
364
+ ├── 消息(Message,人类可读)
365
+ ├── 细节(Details,字段级,按需)
366
+ └── 禁止返回堆栈(stack traces,出于安全)
367
+ ```
368
+
369
+ ---
370
+
371
+ ## 9. 测试原则
372
+
373
+ ### 测试策略
374
+
375
+ | 类型 | 目的 | 工具 |
376
+ |------|------|------|
377
+ | **单元测试(Unit)** | 业务逻辑 | pytest |
378
+ | **集成测试(Integration)** | API 端点 | pytest + httpx/TestClient |
379
+ | **端到端测试(E2E)** | 完整工作流 | pytest + DB |
380
+
381
+ ### 异步测试
382
+
383
+ ```python
384
+ # 异步测试使用 pytest-asyncio
385
+
386
+ import pytest
387
+ from httpx import AsyncClient
388
+
389
+ @pytest.mark.asyncio
390
+ async def test_endpoint():
391
+ async with AsyncClient(app=app, base_url="http://test") as client:
392
+ response = await client.get("/users")
393
+ assert response.status_code == 200
394
+ ```
395
+
396
+ ### Fixture 策略
397
+
398
+ ```
399
+ 常用 fixture(测试夹具):
400
+ ├── db_session → 数据库连接
401
+ ├── client → 测试客户端
402
+ ├── authenticated_user → 带 token(令牌)的用户
403
+ └── sample_data → 测试数据准备
404
+ ```
405
+
406
+ ---
407
+
408
+ ## 10. 决策检查清单
409
+
410
+ 开始实现前:
411
+
412
+ - [ ] **是否询问了用户的框架偏好?**
413
+ - [ ] **是否针对当前上下文选了框架?**(而非默认)
414
+ - [ ] **是否明确了异步 vs 同步(async/sync)?**
415
+ - [ ] **是否规划了类型标注策略?**
416
+ - [ ] **是否确定了项目结构?**
417
+ - [ ] **是否设计了错误处理方案?**
418
+ - [ ] **是否评估了后台任务需求?**
419
+
420
+ ---
421
+
422
+ ## 11. 需要避免的反模式
423
+
424
+ ### ❌ 不要这样做:
425
+ - 简单 API 也默认 Django(FastAPI 往往更合适)
426
+ - 在 async 代码里用 sync 库
427
+ - 对公开 API 跳过类型标注
428
+ - 把业务逻辑塞进 routes/views
429
+ - 忽略 N+1 查询
430
+ - 粗糙混用 async 与 sync
431
+
432
+ ### ✅ 推荐做法:
433
+ - 基于上下文选框架
434
+ - 先确认 async 需求
435
+ - 用 Pydantic 做数据校验
436
+ - 分层解耦(routes → services → repos(仓储层))
437
+ - 覆盖关键路径测试
438
+
439
+ ---
440
+
441
+ > **牢记:** Python 模式的核心是“按当前场景做决策”。不要抄代码,先判断什么最适合你的应用。