aodw-skill 0.7.3
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/.aodw/01-core/ai-interaction-rules.md +218 -0
- package/.aodw/01-core/ai-knowledge-rules.md +302 -0
- package/.aodw/01-core/ai-project-overview-rules.md +284 -0
- package/.aodw/01-core/aodw-constitution-summary.md +20 -0
- package/.aodw/01-core/aodw-constitution.md +419 -0
- package/.aodw/01-core/csf-thinking-framework.md +373 -0
- package/.aodw/01-core/git-discipline.md +226 -0
- package/.aodw/01-core/module-doc-rules.md +90 -0
- package/.aodw/02-workflow/aodw-development-stages.md +235 -0
- package/.aodw/02-workflow/rt-id-generation-rules.md +267 -0
- package/.aodw/02-workflow/rt-manager-summary.md +15 -0
- package/.aodw/02-workflow/rt-manager.md +399 -0
- package/.aodw/02-workflow/spec-full-profile-summary.md +13 -0
- package/.aodw/02-workflow/spec-full-profile.md +391 -0
- package/.aodw/02-workflow/spec-lite-profile.md +313 -0
- package/.aodw/02-workflow/ui-workflow-rules.md +334 -0
- package/.aodw/03-standards/ai-coding-rules-common.md +89 -0
- package/.aodw/03-standards/ai-coding-rules.md +370 -0
- package/.aodw/03-standards/stacks/java-springboot/ai-coding-rules-backend.md +100 -0
- package/.aodw/03-standards/stacks/python-fastapi/ai-coding-rules-backend.md +612 -0
- package/.aodw/03-standards/stacks/react-typescript/ai-coding-rules-frontend.md +291 -0
- package/.aodw/03-standards/stacks/vue2/ai-coding-rules-frontend.md +97 -0
- package/.aodw/03-standards/ui-kit/ui-kit.md +163 -0
- package/.aodw/04-auditors/aodw-development-auditor-rules.md +470 -0
- package/.aodw/04-auditors/aodw-full-auditor-rules.md +365 -0
- package/.aodw/04-auditors/aodw-requirement-auditor-rules.md +408 -0
- package/.aodw/05-tooling/ai-tools-init-rules.md +465 -0
- package/.aodw/06-project/ai-overview.md +116 -0
- package/.aodw/06-project/modules-index.yaml +11 -0
- package/.aodw/07-optimization/token-usage-analysis.md +253 -0
- package/.aodw/README.md +26 -0
- package/.aodw/RELEASE-CHECKLIST.md +144 -0
- package/.aodw/config.yaml +2 -0
- package/.aodw/manifest.yaml +98 -0
- package/.aodw/templates/SOURCE-TO-DISTRIBUTION-GUIDE.md +276 -0
- package/.aodw/templates/TEMPLATE-APPLICATION-GUIDE.md +246 -0
- package/.aodw/templates/aodw-kernel-loader-template.md +70 -0
- package/.aodw/templates/audit-report-template.md +232 -0
- package/.aodw/templates/changelog-template.md +16 -0
- package/.aodw/templates/checklists/coding-standards-template.md +110 -0
- package/.aodw/templates/csf-review-template.md +201 -0
- package/.aodw/templates/impact-template.md +17 -0
- package/.aodw/templates/invariants-template.md +12 -0
- package/.aodw/templates/module-readme-template.md +39 -0
- package/.aodw/templates/plan-lite-template.md +11 -0
- package/.aodw/templates/rt-decision-template.md +13 -0
- package/.aodw/templates/rt-intake-template.md +33 -0
- package/.aodw/templates/rt-meta-template.yaml +43 -0
- package/.aodw/templates/spec-lite-template.md +17 -0
- package/.aodw/templates/tests-template.md +13 -0
- package/.aodw/templates/tools-config/README.md +80 -0
- package/.aodw/templates/tools-config/backend/black.config.template.toml +6 -0
- package/.aodw/templates/tools-config/backend/pre-commit.config.template.yaml +16 -0
- package/.aodw/templates/tools-config/backend/ruff.config.template.toml +23 -0
- package/.aodw/templates/tools-config/frontend/eslint.config.template.json +113 -0
- package/.aodw/templates/tools-config/frontend/prettier.config.template.json +10 -0
- package/.aodw/templates/tools-config/frontend/tsconfig.paths.template.json +11 -0
- package/.aodw/workflow-guide.md +51 -0
- package/AODW_Adapters/README.md +143 -0
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/antigravity/.agent/rules/aodw-check.md +7 -0
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/antigravity/.agent/rules/aodw-done.md +7 -0
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/antigravity/.agent/rules/aodw-full.md +7 -0
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/antigravity/.agent/rules/aodw-governance.md +7 -0
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/antigravity/.agent/rules/aodw-impact.md +7 -0
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/antigravity/.agent/rules/aodw-init.md +7 -0
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/antigravity/.agent/rules/aodw-invariants.md +7 -0
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/antigravity/.agent/rules/aodw-lite.md +7 -0
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/antigravity/.agent/rules/aodw-module.md +7 -0
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/antigravity/.agent/rules/aodw-new.md +7 -0
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/antigravity/.agent/rules/aodw-open.md +7 -0
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/antigravity/.agent/rules/aodw-pause.md +7 -0
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/antigravity/.agent/rules/aodw-resume.md +7 -0
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/antigravity/.agent/rules/aodw-tests.md +7 -0
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/antigravity/.agent/rules/aodw-upgrade.md +7 -0
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/antigravity/.agent/rules/aodw.md +35 -0
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/antigravity/global_workflows/aodw-check.md +16 -0
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/antigravity/global_workflows/aodw-done.md +16 -0
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/antigravity/global_workflows/aodw-full.md +14 -0
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/antigravity/global_workflows/aodw-governance.md +13 -0
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/antigravity/global_workflows/aodw-impact.md +13 -0
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/antigravity/global_workflows/aodw-init.md +13 -0
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/antigravity/global_workflows/aodw-invariants.md +13 -0
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/antigravity/global_workflows/aodw-lite.md +14 -0
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/antigravity/global_workflows/aodw-module.md +13 -0
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/antigravity/global_workflows/aodw-new.md +30 -0
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/antigravity/global_workflows/aodw-open.md +10 -0
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/antigravity/global_workflows/aodw-pause.md +12 -0
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/antigravity/global_workflows/aodw-resume.md +12 -0
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/antigravity/global_workflows/aodw-tests.md +13 -0
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/antigravity/global_workflows/aodw-upgrade.md +12 -0
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/antigravity/global_workflows/aodw.md +18 -0
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/claude/CLAUDE.md +17 -0
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/cursor/.cursor/commands/aodw-check.md +30 -0
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/cursor/.cursor/commands/aodw-done.md +52 -0
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/cursor/.cursor/commands/aodw-full.md +31 -0
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/cursor/.cursor/commands/aodw-governance.md +34 -0
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/cursor/.cursor/commands/aodw-impact.md +25 -0
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/cursor/.cursor/commands/aodw-init.md +75 -0
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/cursor/.cursor/commands/aodw-invariants.md +29 -0
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/cursor/.cursor/commands/aodw-lite.md +23 -0
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/cursor/.cursor/commands/aodw-module.md +24 -0
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/cursor/.cursor/commands/aodw-new.md +70 -0
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/cursor/.cursor/commands/aodw-open.md +19 -0
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/cursor/.cursor/commands/aodw-pause.md +19 -0
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/cursor/.cursor/commands/aodw-resume.md +20 -0
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/cursor/.cursor/commands/aodw-tests.md +26 -0
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/cursor/.cursor/commands/aodw-upgrade.md +27 -0
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/cursor/.cursor/commands/aodw.md +69 -0
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/cursor/.cursor/commands/deploypromote.md +20 -0
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/cursor/.cursor/commands/featuretotester.md +32 -0
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/cursor/.cursor/deploy/feature_to_master_push_test_local.sh +390 -0
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/cursor/.cursor/deploy/promote_only.sh +210 -0
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/cursor/.cursor/deploy/rollback_prod.sh +99 -0
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/cursor/.cursor/rules/aodw.mdc +26 -0
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/gemini/.agent/rules/aodw-check.md +29 -0
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/gemini/.agent/rules/aodw-done.md +52 -0
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/gemini/.agent/rules/aodw-full.md +30 -0
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/gemini/.agent/rules/aodw-governance.md +33 -0
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/gemini/.agent/rules/aodw-impact.md +24 -0
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/gemini/.agent/rules/aodw-init.md +75 -0
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/gemini/.agent/rules/aodw-invariants.md +28 -0
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/gemini/.agent/rules/aodw-lite.md +22 -0
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/gemini/.agent/rules/aodw-module.md +23 -0
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/gemini/.agent/rules/aodw-new.md +92 -0
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/gemini/.agent/rules/aodw-open.md +18 -0
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/gemini/.agent/rules/aodw-pause.md +18 -0
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/gemini/.agent/rules/aodw-resume.md +19 -0
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/gemini/.agent/rules/aodw-tests.md +25 -0
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/gemini/.agent/rules/aodw-upgrade.md +26 -0
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/gemini/.agent/rules/aodw.md +68 -0
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/gemini/GEMINI.md +17 -0
- package/AODW_Adapters/_backup/v4.0.0-simplified/antigravity/.agent/rules/aodw-analyze.md +15 -0
- package/AODW_Adapters/_backup/v4.0.0-simplified/antigravity/.agent/rules/aodw-complete.md +15 -0
- package/AODW_Adapters/_backup/v4.0.0-simplified/antigravity/.agent/rules/aodw-control.md +14 -0
- package/AODW_Adapters/_backup/v4.0.0-simplified/antigravity/.agent/rules/aodw-decide.md +16 -0
- package/AODW_Adapters/_backup/v4.0.0-simplified/antigravity/.agent/rules/aodw-governance.md +7 -0
- package/AODW_Adapters/_backup/v4.0.0-simplified/antigravity/.agent/rules/aodw-implement.md +16 -0
- package/AODW_Adapters/_backup/v4.0.0-simplified/antigravity/.agent/rules/aodw-init.md +7 -0
- package/AODW_Adapters/_backup/v4.0.0-simplified/antigravity/.agent/rules/aodw-intake.md +15 -0
- package/AODW_Adapters/_backup/v4.0.0-simplified/antigravity/.agent/rules/aodw-open.md +7 -0
- package/AODW_Adapters/_backup/v4.0.0-simplified/antigravity/.agent/rules/aodw-simplified.md +107 -0
- package/AODW_Adapters/_backup/v4.0.0-simplified/antigravity/.agent/rules/aodw-verify.md +14 -0
- package/AODW_Adapters/_backup/v4.0.0-simplified/antigravity/global_workflows/aodw-analyze.md +24 -0
- package/AODW_Adapters/_backup/v4.0.0-simplified/antigravity/global_workflows/aodw-complete.md +23 -0
- package/AODW_Adapters/_backup/v4.0.0-simplified/antigravity/global_workflows/aodw-control.md +21 -0
- package/AODW_Adapters/_backup/v4.0.0-simplified/antigravity/global_workflows/aodw-decide.md +26 -0
- package/AODW_Adapters/_backup/v4.0.0-simplified/antigravity/global_workflows/aodw-governance.md +13 -0
- package/AODW_Adapters/_backup/v4.0.0-simplified/antigravity/global_workflows/aodw-implement.md +21 -0
- package/AODW_Adapters/_backup/v4.0.0-simplified/antigravity/global_workflows/aodw-init.md +13 -0
- package/AODW_Adapters/_backup/v4.0.0-simplified/antigravity/global_workflows/aodw-intake.md +28 -0
- package/AODW_Adapters/_backup/v4.0.0-simplified/antigravity/global_workflows/aodw-open.md +10 -0
- package/AODW_Adapters/_backup/v4.0.0-simplified/antigravity/global_workflows/aodw-verify.md +20 -0
- package/AODW_Adapters/_backup/v4.0.0-simplified/antigravity/global_workflows/aodw.md +18 -0
- package/AODW_Adapters/antigravity/.agent/rules/aodw.md +74 -0
- package/AODW_Adapters/claude/CLAUDE.md +70 -0
- package/AODW_Adapters/cursor/.cursor/commands/README.md +37 -0
- package/AODW_Adapters/cursor/.cursor/rules/aodw.mdc +77 -0
- package/AODW_Adapters/gemini/.agent/rules/aodw-analyze.md +15 -0
- package/AODW_Adapters/gemini/.agent/rules/aodw-complete.md +15 -0
- package/AODW_Adapters/gemini/.agent/rules/aodw-control.md +14 -0
- package/AODW_Adapters/gemini/.agent/rules/aodw-decide.md +16 -0
- package/AODW_Adapters/gemini/.agent/rules/aodw-governance.md +33 -0
- package/AODW_Adapters/gemini/.agent/rules/aodw-implement.md +16 -0
- package/AODW_Adapters/gemini/.agent/rules/aodw-init.md +75 -0
- package/AODW_Adapters/gemini/.agent/rules/aodw-intake.md +15 -0
- package/AODW_Adapters/gemini/.agent/rules/aodw-open.md +18 -0
- package/AODW_Adapters/gemini/.agent/rules/aodw-verify.md +14 -0
- package/AODW_Adapters/gemini/.agent/rules/aodw.md +70 -0
- package/AODW_Adapters/gemini/GEMINI.md +17 -0
- package/AODW_Adapters/general/.github/copilot-instructions.md +34 -0
- package/AODW_Adapters/general/AGENTS.md +70 -0
- package/README.md +118 -0
- package/bin/aodw.js +627 -0
- package/bin/commands/init-overview.js +801 -0
- package/bin/commands/init-tools.js +811 -0
- package/bin/commands/new.js +235 -0
- package/bin/commands/serve.js +79 -0
- package/bin/processors/index.js +109 -0
- package/bin/update-adapters-from-template.js +89 -0
- package/bin/utils/config.js +56 -0
- package/docs/README.md +26 -0
- package/docs/adapter-evaluation.md +55 -0
- package/docs/backend-guidelines.md +335 -0
- package/docs/frontend-guidelines.md +266 -0
- package/docs/installation-variants.md +88 -0
- package/docs/migration-guide-0.2.0.md +250 -0
- package/docs/platform-matrix.md +83 -0
- package/package.json +40 -0
|
@@ -0,0 +1,335 @@
|
|
|
1
|
+
# 后端开发规范(FastAPI / Python)
|
|
2
|
+
|
|
3
|
+
> 适用技术栈:
|
|
4
|
+
> - 语言:**Python 3.11+**
|
|
5
|
+
> - Web 框架:**FastAPI**
|
|
6
|
+
> - 运行:**Uvicorn / Gunicorn+Uvicorn worker**
|
|
7
|
+
> - 数据库:MySQL / PostgreSQL / SQLite 等
|
|
8
|
+
> - ORM:可选 SQLAlchemy / Tortoise ORM / 其他
|
|
9
|
+
> - 工具:**Ruff + Black/Blue + pre-commit**
|
|
10
|
+
> - 使用场景:人类开发 + AI 工具(Cursor、Claude Code 等)
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## 1. 工具与质量控制
|
|
15
|
+
|
|
16
|
+
### 1.1 静态检查 & 格式化
|
|
17
|
+
|
|
18
|
+
- **Ruff**(推荐)
|
|
19
|
+
- 替代 Flake8 / isort / 部分 pylint 功能
|
|
20
|
+
- 负责:语法错误、未使用变量、import 排序、复杂度检查等
|
|
21
|
+
- **Black** 或 **Blue**
|
|
22
|
+
- 统一代码格式(缩进、引号、换行、最大行长等)
|
|
23
|
+
|
|
24
|
+
> 原则:
|
|
25
|
+
> - Ruff 负责“对/错、好/坏”;
|
|
26
|
+
> - Black/Blue 负责“长什么样”。
|
|
27
|
+
|
|
28
|
+
### 1.2 建议配置(示例)
|
|
29
|
+
|
|
30
|
+
在 `pyproject.toml` 中:
|
|
31
|
+
|
|
32
|
+
```toml
|
|
33
|
+
[tool.black]
|
|
34
|
+
line-length = 100
|
|
35
|
+
target-version = ["py311"]
|
|
36
|
+
|
|
37
|
+
[tool.ruff]
|
|
38
|
+
line-length = 100
|
|
39
|
+
target-version = "py311"
|
|
40
|
+
|
|
41
|
+
[tool.ruff.lint]
|
|
42
|
+
select = ["E", "F", "PLR", "I"]
|
|
43
|
+
ignore = []
|
|
44
|
+
|
|
45
|
+
# E, F: 基本错误/语法问题
|
|
46
|
+
# I: import 排序
|
|
47
|
+
# PLR: 复杂度/过长函数等(可控制“怪物函数”)
|
|
48
|
+
|
|
49
|
+
[tool.ruff.lint.per-file-ignores]
|
|
50
|
+
# 如果有 __init__.py 可以适当放宽
|
|
51
|
+
"__init__.py" = ["F401"]
|
|
52
|
+
|
|
53
|
+
说明:
|
|
54
|
+
• 后续可按需开启更多规则,例如 D(docstring)等。
|
|
55
|
+
• 行长统一 100 字符,便于浏览。
|
|
56
|
+
|
|
57
|
+
1.3 文件大小与复杂度限制
|
|
58
|
+
|
|
59
|
+
统一约束(给人和 AI 都要遵守):
|
|
60
|
+
• 单文件行数(不强制,但作为警戒线):
|
|
61
|
+
• 路由文件:≤ 300 行,推荐 ≤ 250 行
|
|
62
|
+
• service / repository 文件:≤ 300 行
|
|
63
|
+
• schema / model / utils:≤ 200 行
|
|
64
|
+
• 单个函数:
|
|
65
|
+
• 函数主体代码行数:≤ 60 行
|
|
66
|
+
• 分支过多、嵌套过深要拆分为子函数
|
|
67
|
+
• 复杂度:
|
|
68
|
+
• 圈复杂度 complexity(Ruff PLR 规则)建议 ≤ 10
|
|
69
|
+
|
|
70
|
+
⸻
|
|
71
|
+
|
|
72
|
+
2. 项目目录结构规范
|
|
73
|
+
|
|
74
|
+
2.1 顶层结构(backend)
|
|
75
|
+
backend/
|
|
76
|
+
app/
|
|
77
|
+
api/ # 路由 (FastAPI routers)
|
|
78
|
+
core/ # 核心配置 & 启动 & 依赖注入
|
|
79
|
+
models/ # ORM 模型
|
|
80
|
+
schemas/ # Pydantic 模型 (请求/响应)
|
|
81
|
+
services/ # 业务服务层 (领域逻辑)
|
|
82
|
+
repositories/ # 数据访问层 (DAO)
|
|
83
|
+
utils/ # 工具函数、公用模块
|
|
84
|
+
main.py # FastAPI 入口
|
|
85
|
+
tests/ # 单元测试/集成测试
|
|
86
|
+
pyproject.toml or requirements.txt
|
|
87
|
+
Dockerfile
|
|
88
|
+
|
|
89
|
+
原则:
|
|
90
|
+
• api/ 只做 HTTP 协议层:路由定义 + 请求/响应映射。
|
|
91
|
+
• services/ 负责业务逻辑和用例流转。
|
|
92
|
+
• repositories/ 负责数据库读写操作。
|
|
93
|
+
• schemas/ 是 API 契约(Pydantic)。
|
|
94
|
+
• models/ 是数据库层(ORM)。
|
|
95
|
+
|
|
96
|
+
2.2 子目录结构示例
|
|
97
|
+
app/
|
|
98
|
+
api/
|
|
99
|
+
v1/
|
|
100
|
+
project.py # /api/v1/projects 相关路由
|
|
101
|
+
user.py # /api/v1/users 相关路由
|
|
102
|
+
auth.py # 登录/鉴权相关路由
|
|
103
|
+
|
|
104
|
+
core/
|
|
105
|
+
config.py # 配置,读取环境变量
|
|
106
|
+
security.py # 安全相关 (JWT, 密码加密等)
|
|
107
|
+
deps.py # Depends 使用的通用依赖,如 db, current_user
|
|
108
|
+
|
|
109
|
+
models/
|
|
110
|
+
project.py # Project ORM 模型
|
|
111
|
+
user.py # User ORM 模型
|
|
112
|
+
__init__.py # 导出所有 models
|
|
113
|
+
|
|
114
|
+
schemas/
|
|
115
|
+
project.py # Project 相关请求/响应 schema
|
|
116
|
+
user.py # User 相关 schema
|
|
117
|
+
common.py # 通用 schema,如分页等
|
|
118
|
+
|
|
119
|
+
services/
|
|
120
|
+
project_service.py # 项目相关业务逻辑
|
|
121
|
+
user_service.py # 用户相关业务逻辑
|
|
122
|
+
auth_service.py # 鉴权、token 逻辑
|
|
123
|
+
|
|
124
|
+
repositories/
|
|
125
|
+
project_repository.py
|
|
126
|
+
user_repository.py
|
|
127
|
+
|
|
128
|
+
utils/
|
|
129
|
+
datetime.py # 时间处理
|
|
130
|
+
pagination.py # 分页工具
|
|
131
|
+
logging.py # 日志封装
|
|
132
|
+
|
|
133
|
+
main.py # 创建 FastAPI app,挂载路由
|
|
134
|
+
3. 命名与分层规范
|
|
135
|
+
|
|
136
|
+
3.1 命名规则
|
|
137
|
+
• 文件:
|
|
138
|
+
• 模块/领域:project.py, user.py, auth.py
|
|
139
|
+
• service:project_service.py
|
|
140
|
+
• repository:project_repository.py
|
|
141
|
+
• schema:project.py(内部类型名区分:ProjectCreate, ProjectUpdate, ProjectOut)
|
|
142
|
+
• 类:
|
|
143
|
+
• ORM 模型:Project, User, UserRole
|
|
144
|
+
• Pydantic 模型:ProjectCreate, ProjectUpdate, ProjectDetail
|
|
145
|
+
• 函数:
|
|
146
|
+
• 使用动词开头的 snake_case:create_project, get_user_by_id
|
|
147
|
+
|
|
148
|
+
3.2 分层职责
|
|
149
|
+
|
|
150
|
+
api 层(路由层):
|
|
151
|
+
• 职责:
|
|
152
|
+
• 定义 URL 路径及 HTTP 方法
|
|
153
|
+
• 参数绑定 & schema 校验
|
|
154
|
+
• 调用对应 service 层
|
|
155
|
+
• 处理与 HTTP 协议相关的细节(状态码、响应模型)
|
|
156
|
+
• 禁止:
|
|
157
|
+
• 写复杂业务逻辑
|
|
158
|
+
• 直接操作数据库
|
|
159
|
+
|
|
160
|
+
service 层:
|
|
161
|
+
• 职责:
|
|
162
|
+
• 聚合业务用例逻辑(如创建项目时检查权限、写多表等)
|
|
163
|
+
• 事务控制(必要时)
|
|
164
|
+
• 调用 repository 完成数据读写
|
|
165
|
+
• 禁止:
|
|
166
|
+
• 直接处理 HTTP 请求/响应对象(Request, Response)
|
|
167
|
+
|
|
168
|
+
repository 层:
|
|
169
|
+
• 职责:
|
|
170
|
+
• 封装具体的数据访问逻辑(ORM 操作)
|
|
171
|
+
• 提供清晰的接口,如 get_project_by_id, list_projects
|
|
172
|
+
• 禁止:
|
|
173
|
+
• 引入业务逻辑,避免与 service 互相污染
|
|
174
|
+
|
|
175
|
+
schemas 层:
|
|
176
|
+
• 职责:
|
|
177
|
+
• 定义请求与响应的数据结构(Pydantic)
|
|
178
|
+
• 提供类型安全、可读性好的数据契约
|
|
179
|
+
• 命名建议:
|
|
180
|
+
• 输入:XxxCreate, XxxUpdate
|
|
181
|
+
• 输出:XxxOut, XxxDetail, XxxListItem
|
|
182
|
+
|
|
183
|
+
models 层:
|
|
184
|
+
• 职责:
|
|
185
|
+
• 定义数据库表结构、关系、索引等
|
|
186
|
+
• 与 schemas 区分开,避免直接把 ORM 暴露给外部。
|
|
187
|
+
|
|
188
|
+
⸻
|
|
189
|
+
|
|
190
|
+
4. Type Hints & 异步规范
|
|
191
|
+
|
|
192
|
+
4.1 强制使用类型注解
|
|
193
|
+
• 所有对外函数(api/service/repository)必须有明确类型注解:
|
|
194
|
+
• 参数类型
|
|
195
|
+
• 返回值类型
|
|
196
|
+
• 示例:
|
|
197
|
+
async def get_project(project_id: int, db: Session) -> Project | None:
|
|
198
|
+
...
|
|
199
|
+
|
|
200
|
+
4.2 异步规范
|
|
201
|
+
• FastAPI 路由 handler 默认使用 async def
|
|
202
|
+
• 如果 service / repository 中使用了 I/O(数据库、网络),建议全链路 async
|
|
203
|
+
• 不要在 async 函数中直接调用阻塞 I/O(如同步数据库驱动),必要时使用线程池/异步驱动
|
|
204
|
+
|
|
205
|
+
⸻
|
|
206
|
+
|
|
207
|
+
5. 代码结构与文件粒度
|
|
208
|
+
|
|
209
|
+
5.1 路由文件(api)
|
|
210
|
+
• 单个文件建议最多包含:
|
|
211
|
+
• 1~2 个相关资源的路由
|
|
212
|
+
• 路由函数数量不宜超过 10~15 个
|
|
213
|
+
• 每个路由 handler:
|
|
214
|
+
• 主要处理参数解析、调用 service、返回结果
|
|
215
|
+
• 函数主体 ≤ 40 行,复杂逻辑下沉 service
|
|
216
|
+
|
|
217
|
+
5.2 service 文件
|
|
218
|
+
• 按领域拆分,如 project_service.py, user_service.py
|
|
219
|
+
• 单个 service 文件:
|
|
220
|
+
• 建议处理一个领域的核心用例
|
|
221
|
+
• 多到一定程度时,可以拆文件或拆类
|
|
222
|
+
• 常见用例:
|
|
223
|
+
• create_project
|
|
224
|
+
• update_project
|
|
225
|
+
• delete_project
|
|
226
|
+
• list_projects
|
|
227
|
+
• get_project_detail
|
|
228
|
+
|
|
229
|
+
5.3 repository 文件
|
|
230
|
+
• 每个 repository 文件对应一个主领域模型
|
|
231
|
+
• 函数名力求语义清晰,如:
|
|
232
|
+
• get_project_by_id
|
|
233
|
+
• get_projects_by_owner
|
|
234
|
+
• create_project
|
|
235
|
+
• update_project
|
|
236
|
+
• delete_project
|
|
237
|
+
|
|
238
|
+
⸻
|
|
239
|
+
|
|
240
|
+
6. 配置与环境变量
|
|
241
|
+
• 使用 core/config.py 集中管理配置:
|
|
242
|
+
|
|
243
|
+
from pydantic_settings import BaseSettings
|
|
244
|
+
|
|
245
|
+
class Settings(BaseSettings):
|
|
246
|
+
env: str = "dev"
|
|
247
|
+
database_url: str
|
|
248
|
+
secret_key: str
|
|
249
|
+
access_token_expire_minutes: int = 60
|
|
250
|
+
|
|
251
|
+
class Config:
|
|
252
|
+
env_file = ".env"
|
|
253
|
+
|
|
254
|
+
|
|
255
|
+
settings = Settings()
|
|
256
|
+
|
|
257
|
+
• 业务代码通过 from app.core.config import settings 获取配置
|
|
258
|
+
• 不在业务代码中直接使用 os.getenv
|
|
259
|
+
|
|
260
|
+
⸻
|
|
261
|
+
|
|
262
|
+
7. 日志与错误处理
|
|
263
|
+
• 提供统一日志封装 utils/logging.py
|
|
264
|
+
• 使用标准库 logging 或 structlog,统一格式
|
|
265
|
+
• 异常处理建议:
|
|
266
|
+
• 自定义业务异常类 BusinessError
|
|
267
|
+
• 在 FastAPI 中注册全局异常处理器,将业务异常转换为友好 HTTP 响应
|
|
268
|
+
|
|
269
|
+
⸻
|
|
270
|
+
|
|
271
|
+
8. 测试规范(可按项目成熟度逐步引入)
|
|
272
|
+
• 所有关键业务逻辑(service)建议有对应测试:
|
|
273
|
+
• 测试文件命名:test_project_service.py
|
|
274
|
+
• 测试目录结构:
|
|
275
|
+
|
|
276
|
+
tests/
|
|
277
|
+
api/
|
|
278
|
+
test_project_api.py
|
|
279
|
+
services/
|
|
280
|
+
test_project_service.py
|
|
281
|
+
repositories/
|
|
282
|
+
test_project_repository.py
|
|
283
|
+
|
|
284
|
+
9. AI(Cursor / Claude 等)使用规则
|
|
285
|
+
|
|
286
|
+
本节是专门给 AI 的“硬约束”,建议原样写入系统提示或规则文件中。
|
|
287
|
+
|
|
288
|
+
当 AI 在本项目中生成后端代码时,必须遵守以下规则:
|
|
289
|
+
1. 目录与分层:
|
|
290
|
+
• 所有新路由文件放在:app/api/v1/ 下;
|
|
291
|
+
• 所有业务逻辑放在:app/services/ 对应文件中;
|
|
292
|
+
• 所有数据访问逻辑放在:app/repositories/;
|
|
293
|
+
• 所有 Pydantic 模型放在:app/schemas/;
|
|
294
|
+
• 所有 ORM 模型放在:app/models/;
|
|
295
|
+
• 工具函数放在:app/utils/;
|
|
296
|
+
• 不允许将路由、业务逻辑、数据库操作全部写进一个文件。
|
|
297
|
+
2. 文件大小与函数复杂度:
|
|
298
|
+
• 路由文件 ≤ 300 行;
|
|
299
|
+
• service / repository 文件 ≤ 300 行;
|
|
300
|
+
• 单个函数 ≤ 60 行;
|
|
301
|
+
• 如果实现完整功能会超过限制:
|
|
302
|
+
• 必须先给出重构后的文件拆分方案(例如新增 service 函数或 repository 函数)
|
|
303
|
+
• 再按文件分别实现,而不是在一个函数或一个文件里堆积。
|
|
304
|
+
3. 实现流程:
|
|
305
|
+
• 第一步:在新增功能时,先输出【目录和分层设计】:
|
|
306
|
+
• 需要新增/修改哪些 api/service/repository/schema 文件;
|
|
307
|
+
• 每个函数的职责是什么。
|
|
308
|
+
• 第二步:按顺序生成每个文件的代码,每次只输出一个文件内容。
|
|
309
|
+
• 第三步:对已有巨型文件进行修改时,优先提出“拆分方案”,再实施重构。
|
|
310
|
+
4. 代码风格与类型:
|
|
311
|
+
• 所有新增函数必须使用类型注解,包括参数和返回值;
|
|
312
|
+
• 路由 handler 使用 async def;
|
|
313
|
+
• 业务逻辑优先放到 service,而不是直接写在路由中;
|
|
314
|
+
• 数据库访问优先通过 repository 函数,而不是直接在 service 中写 ORM 查询。
|
|
315
|
+
|
|
316
|
+
|
|
317
|
+
|
|
318
|
+
10. 示例:新增一个“项目”功能的标准落地方式(AI 指导)
|
|
319
|
+
|
|
320
|
+
当需要新增一个“项目归档(archive)”功能时,AI 应按如下流程设计:
|
|
321
|
+
1. 在 app/api/v1/project.py 中新增路由:
|
|
322
|
+
• POST /projects/{project_id}/archive
|
|
323
|
+
• handler 只负责:
|
|
324
|
+
• 获取 project_id
|
|
325
|
+
• 获取当前用户
|
|
326
|
+
• 调用 project_service.archive_project(...)
|
|
327
|
+
• 返回处理结果
|
|
328
|
+
2. 在 app/services/project_service.py 中新增函数:
|
|
329
|
+
• async def archive_project(project_id: int, current_user: User, db: Session) -> ProjectOut: ...
|
|
330
|
+
3. 在 app/repositories/project_repository.py 中新增或复用函数:
|
|
331
|
+
• async def mark_project_archived(db: Session, project_id: int) -> Project: ...
|
|
332
|
+
4. 在 app/schemas/project.py 中确认是否需要新增响应模型:
|
|
333
|
+
• 如 ProjectStatusUpdate / 在 ProjectOut 中包含 is_archived 字段。
|
|
334
|
+
|
|
335
|
+
|
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
当“前端圣经”用的规范文档。
|
|
2
|
+
内容包括:
|
|
3
|
+
• 用什么工具约束代码质量 & 目录结构
|
|
4
|
+
• 适配你现有栈(React 19 + TS + Vite + Tailwind + Radix + Zustand)
|
|
5
|
+
• 带目录结构、命名、代码风格 & AI 使用规则
|
|
6
|
+
|
|
7
|
+
前端开发规范(面向 AI & 人类开发者)
|
|
8
|
+
|
|
9
|
+
适用项目技术栈:
|
|
10
|
+
• 框架:React 18/19 + TypeScript + Vite
|
|
11
|
+
• UI:Tailwind CSS + Radix UI + 自定义组件库
|
|
12
|
+
• 状态:Zustand
|
|
13
|
+
• 工具:ESLint + Prettier
|
|
14
|
+
• 使用场景:人类开发 + AI 工具(Cursor、Claude Code 等)
|
|
15
|
+
|
|
16
|
+
⸻
|
|
17
|
+
|
|
18
|
+
1. 工具与质量控制
|
|
19
|
+
|
|
20
|
+
1.1 代码质量工具
|
|
21
|
+
• ESLint:统一代码风格 & 代码质量
|
|
22
|
+
• 规则推荐:
|
|
23
|
+
• @typescript-eslint(TS 规则)
|
|
24
|
+
• eslint-plugin-react
|
|
25
|
+
• eslint-plugin-react-hooks
|
|
26
|
+
• eslint-plugin-import
|
|
27
|
+
• eslint-plugin-jsx-a11y
|
|
28
|
+
• eslint-plugin-tailwindcss(可选,用于 Tailwind 排序&校验)
|
|
29
|
+
• Prettier:负责代码格式化(缩进、引号、分号等)
|
|
30
|
+
• 与 ESLint 配合使用:eslint-config-prettier 关闭 ESLint 中跟格式冲突的规则
|
|
31
|
+
|
|
32
|
+
1.2 目录 / 分层相关工具(可选但推荐)
|
|
33
|
+
• 使用 TypeScript path alias + ESLint import 规则 管理模块边界:
|
|
34
|
+
• paths:
|
|
35
|
+
• @app/* → src/app/*
|
|
36
|
+
• @pages/* → src/pages/*
|
|
37
|
+
• @features/* → src/features/*
|
|
38
|
+
• @shared/* → src/shared/*
|
|
39
|
+
• 配合 eslint-plugin-import 限制:
|
|
40
|
+
• pages 只能从 features / shared 引用
|
|
41
|
+
• features 不能直接引用其他 features 的内部实现(只能走公共入口)
|
|
42
|
+
|
|
43
|
+
说明:
|
|
44
|
+
目录结构本身没有“专门 lint 工具”,通常是通过
|
|
45
|
+
约定好的目录 + import 规则 + path alias 来间接约束。
|
|
46
|
+
|
|
47
|
+
1.3 文件大小 & 复杂度约束(ESLint)
|
|
48
|
+
建议在 ESLint 中统一限制(给 AI 也要强调):
|
|
49
|
+
• 单文件最大行数:
|
|
50
|
+
• 页面级组件:≤ 300 行(推荐 ≤ 250 行)
|
|
51
|
+
• 其他组件 / hooks / store:≤ 200 行
|
|
52
|
+
• 单个函数最大行数:≤ 60 行
|
|
53
|
+
• 复杂度控制:
|
|
54
|
+
• complexity ≤ 10
|
|
55
|
+
|
|
56
|
+
⸻
|
|
57
|
+
|
|
58
|
+
2. 目录结构规范
|
|
59
|
+
|
|
60
|
+
2.1 顶层结构
|
|
61
|
+
frontend/
|
|
62
|
+
src/
|
|
63
|
+
app/ # 应用入口、路由、全局 Provider
|
|
64
|
+
pages/ # 页面级(路由入口)
|
|
65
|
+
features/ # 可复用业务模块(跨页面)
|
|
66
|
+
shared/ # 跨业务通用:组件/工具/类型
|
|
67
|
+
config/ # 配置、环境相关
|
|
68
|
+
styles/ # 全局样式
|
|
69
|
+
assets/ # 静态资源
|
|
70
|
+
|
|
71
|
+
2.2 详细结构说明
|
|
72
|
+
src/
|
|
73
|
+
app/
|
|
74
|
+
router/ # 路由定义
|
|
75
|
+
providers/ # 全局 Provider(主题、QueryClient 等)
|
|
76
|
+
layout/ # 顶层布局(如 AppShell)
|
|
77
|
+
|
|
78
|
+
pages/
|
|
79
|
+
ProjectEditorPage/
|
|
80
|
+
index.tsx # 页面入口(路由组件)
|
|
81
|
+
Header.tsx
|
|
82
|
+
Sidebar.tsx
|
|
83
|
+
Canvas.tsx
|
|
84
|
+
Inspector.tsx
|
|
85
|
+
modals/
|
|
86
|
+
NodeCreateModal.tsx
|
|
87
|
+
NodeDeleteConfirmModal.tsx
|
|
88
|
+
hooks/
|
|
89
|
+
useProjectEditorData.ts
|
|
90
|
+
useProjectSelection.ts
|
|
91
|
+
store/
|
|
92
|
+
projectEditor.store.ts
|
|
93
|
+
|
|
94
|
+
ProjectListPage/
|
|
95
|
+
index.tsx
|
|
96
|
+
... # 结构类似,不展开
|
|
97
|
+
|
|
98
|
+
features/
|
|
99
|
+
project/
|
|
100
|
+
components/ # 项目相关可复用组件
|
|
101
|
+
hooks/ # 项目相关可复用 hooks
|
|
102
|
+
store/ # 项目相关 store(全局/跨页面)
|
|
103
|
+
api/ # 与项目相关的 API 封装
|
|
104
|
+
|
|
105
|
+
user/
|
|
106
|
+
components/
|
|
107
|
+
hooks/
|
|
108
|
+
store/
|
|
109
|
+
api/
|
|
110
|
+
|
|
111
|
+
shared/
|
|
112
|
+
components/ # 通用组件:Button、Card、Table、Dialog 等
|
|
113
|
+
hooks/ # 通用 hooks:useDebounce、useResizeObserver 等
|
|
114
|
+
store/ # 通用全局状态
|
|
115
|
+
utils/ # 工具函数:日期、格式化、日志
|
|
116
|
+
types/ # 通用类型/接口声明(如 PaginatedResult 等)
|
|
117
|
+
|
|
118
|
+
config/
|
|
119
|
+
env.ts # 环境变量读取封装
|
|
120
|
+
apiClient.ts # axios / fetch 封装
|
|
121
|
+
|
|
122
|
+
styles/
|
|
123
|
+
globals.css
|
|
124
|
+
tailwind.css
|
|
125
|
+
|
|
126
|
+
规则:
|
|
127
|
+
• pages/:按路由拆目录,每个页面一个文件夹。
|
|
128
|
+
• features/:按业务域拆目录(project、user、auth…)。
|
|
129
|
+
• shared/:只能依赖 shared 自身,不依赖 pages 或 features。
|
|
130
|
+
• pages 可以依赖 features & shared;
|
|
131
|
+
features 可以依赖 shared,但尽量不要彼此深度耦合。
|
|
132
|
+
|
|
133
|
+
⸻
|
|
134
|
+
|
|
135
|
+
3. 命名规范
|
|
136
|
+
|
|
137
|
+
3.1 文件命名
|
|
138
|
+
• React 组件文件:帕斯卡命名(大驼峰)
|
|
139
|
+
• ProjectEditorPage/index.tsx
|
|
140
|
+
• Header.tsx, ProjectTable.tsx
|
|
141
|
+
• hooks 文件:useXxx.ts
|
|
142
|
+
• useProjectEditorData.ts
|
|
143
|
+
• useProjectSelection.ts
|
|
144
|
+
• Zustand store:
|
|
145
|
+
• xxx.store.ts(如 projectEditor.store.ts)
|
|
146
|
+
• 类型声明:
|
|
147
|
+
• xxx.types.ts 或集中放在 shared/types 中
|
|
148
|
+
• 工具函数:
|
|
149
|
+
• xxx.utils.ts 或放在 shared/utils 下
|
|
150
|
+
|
|
151
|
+
3.2 组件 & 变量命名
|
|
152
|
+
• 组件:PascalCase
|
|
153
|
+
• 变量 / 函数:camelCase
|
|
154
|
+
• 常量:SCREAMING_SNAKE_CASE
|
|
155
|
+
• hooks:以 use 开头,返回 [state, actions] 或对象
|
|
156
|
+
|
|
157
|
+
⸻
|
|
158
|
+
|
|
159
|
+
4. TypeScript 规范
|
|
160
|
+
• 启用严格模式:"strict": true
|
|
161
|
+
• 禁止滥用 any:
|
|
162
|
+
• 使用 unknown + 类型收窄 或 合理定义接口
|
|
163
|
+
• API 层优先使用:
|
|
164
|
+
• DTO 类型(请求)
|
|
165
|
+
• Response 类型(响应)
|
|
166
|
+
• 类型命名:
|
|
167
|
+
• 接口 / 类型:Project, ProjectDetail, UserProfile
|
|
168
|
+
• 不建议 IProject 这种前缀
|
|
169
|
+
|
|
170
|
+
⸻
|
|
171
|
+
|
|
172
|
+
5. React 编码规范
|
|
173
|
+
|
|
174
|
+
5.1 组件类型
|
|
175
|
+
• 优先使用函数组件 + Hooks:
|
|
176
|
+
• 不使用 class 组件
|
|
177
|
+
• 每个文件聚焦一个主要组件:
|
|
178
|
+
• 如果一个文件内存在多个复杂组件 → 拆文件
|
|
179
|
+
|
|
180
|
+
5.2 状态管理策略
|
|
181
|
+
• 页面局部状态:useState / useReducer
|
|
182
|
+
• 页面内复杂状态:页面专用 hooks/ + store/(Zustand)
|
|
183
|
+
• 跨页面共享业务状态:放在 features/*/store
|
|
184
|
+
• 全局通用状态:放在 shared/store
|
|
185
|
+
|
|
186
|
+
原则:能局部就不全局,能 hook 就不 store。
|
|
187
|
+
|
|
188
|
+
5.3 副作用 & 数据请求
|
|
189
|
+
• 所有数据请求封装在:
|
|
190
|
+
• features/*/api
|
|
191
|
+
• 或页面专用 hooks:pages/*/hooks
|
|
192
|
+
• 不在组件中直接调用 fetch/axios
|
|
193
|
+
→ 统一用 apiClient / 封装方法。
|
|
194
|
+
|
|
195
|
+
⸻
|
|
196
|
+
|
|
197
|
+
6. Tailwind & Radix 使用规范
|
|
198
|
+
|
|
199
|
+
6.1 Tailwind
|
|
200
|
+
• 使用 className 写原子类,尽量保持每个组件的 className 长度可读;
|
|
201
|
+
• 复杂样式组合抽离到:
|
|
202
|
+
• cn() 帮助函数结合条件类
|
|
203
|
+
• 或封装为组件,例如 <PrimaryButton />
|
|
204
|
+
• 不在逻辑代码里到处写硬编码颜色,优先用设计系统中的 token(在 Tailwind config 中定义)。
|
|
205
|
+
|
|
206
|
+
6.2 Radix UI
|
|
207
|
+
• Radix 组件作为“基础交互组件”,在 shared/components 中封装:
|
|
208
|
+
• 例如 Dialog、Popover、DropdownMenu 封装为:
|
|
209
|
+
• SharedDialog.tsx
|
|
210
|
+
• DropdownMenu.tsx
|
|
211
|
+
• 页面或业务组件不直接大量拼 Radix 基础元素,而是复用封装后的组件。
|
|
212
|
+
|
|
213
|
+
⸻
|
|
214
|
+
|
|
215
|
+
7. AI(Cursor / Claude 等)使用规则
|
|
216
|
+
|
|
217
|
+
本节是专门给 AI 的“硬约束”,建议原封不动写进系统提示。
|
|
218
|
+
|
|
219
|
+
7.1 基本要求
|
|
220
|
+
AI 在本项目中写前端代码时必须遵守:
|
|
221
|
+
1. 目录与分层:
|
|
222
|
+
• 新页面 → 必须放到 src/pages/<PageName>/ 下;
|
|
223
|
+
• 可复用业务逻辑 → 放到对应 src/features/<domain>/ 下;
|
|
224
|
+
• 通用组件 / hooks / 工具 → 放到 src/shared/ 下;
|
|
225
|
+
• 不允许把所有代码都写在一个目录或一个文件里。
|
|
226
|
+
2. 文件大小:
|
|
227
|
+
• 页面入口组件(index.tsx)≤ 300 行;
|
|
228
|
+
• 普通组件 / hooks / store 文件 ≤ 200 行;
|
|
229
|
+
• 单个函数 ≤ 60 行;
|
|
230
|
+
• 如果一个功能实现会超过限制:
|
|
231
|
+
• 必须先设计拆分方案(组件 / hooks / store 列表)
|
|
232
|
+
• 再按文件逐步实现,而不是一次性生成巨型文件。
|
|
233
|
+
3. 实现流程:
|
|
234
|
+
• 第一步:先给出【目录与文件拆分方案】,解释每个文件的职责;
|
|
235
|
+
• 第二步:按“每次一个文件”的方式生成代码;
|
|
236
|
+
• 第三步:在已有大文件重构时,优先拆分成多个小文件,而不是继续追加代码。
|
|
237
|
+
4. 代码风格:
|
|
238
|
+
• 使用函数组件 + Hooks;
|
|
239
|
+
• 使用 TypeScript,类型尽量完整;
|
|
240
|
+
• 遁守 ESLint / Prettier 风格(缩进、分号、引号不需要显式指定,但生成的代码要保证能通过常规规则)。
|
|
241
|
+
|
|
242
|
+
7.2 典型 AI Prompt 模板(示例)
|
|
243
|
+
用于新页面开发:
|
|
244
|
+
|
|
245
|
+
技术栈:React + TS + Vite + Tailwind + Radix + Zustand。
|
|
246
|
+
目录结构与命名请严格遵守本项目的前端规范。
|
|
247
|
+
目标:实现【XXX 页面】。
|
|
248
|
+
|
|
249
|
+
步骤 1:先只输出该页面对应的目录和文件拆分方案,目标是:
|
|
250
|
+
• 页面入口:src/pages/<PageName>/index.tsx
|
|
251
|
+
• 拆分独立的子组件、hooks、store,确保:
|
|
252
|
+
• 页面入口文件行数 ≤ 300 行;
|
|
253
|
+
• 其他文件 ≤ 200 行;
|
|
254
|
+
• 单个函数 ≤ 60 行。
|
|
255
|
+
|
|
256
|
+
步骤 2:在我确认拆分方案后,再逐个文件实现,每次只输出一个文件的完整代码。
|
|
257
|
+
|
|
258
|
+
⸻
|
|
259
|
+
|
|
260
|
+
8. 测试 & 可维护性(可选扩展)
|
|
261
|
+
|
|
262
|
+
如果后面增加测试,可以约定:
|
|
263
|
+
• 所有关键组件 / hooks 都有对应测试文件:
|
|
264
|
+
• ComponentName.test.tsx
|
|
265
|
+
• useHookName.test.ts
|
|
266
|
+
• 测试文件放在同级目录或 __tests__ 子目录中。
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# AODW 双版本安装方案
|
|
2
|
+
|
|
3
|
+
本方案用于同时支持 legacy 与 next 两条路线,并确保互不影响。
|
|
4
|
+
|
|
5
|
+
## 1. 安装目标
|
|
6
|
+
|
|
7
|
+
- legacy:保持现有稳定方案
|
|
8
|
+
- next:引入三层架构优化(manifest + workflow-guide + summaries)
|
|
9
|
+
- 两套安装可并行存在,互不覆盖
|
|
10
|
+
|
|
11
|
+
## 2. 安装命令
|
|
12
|
+
|
|
13
|
+
### 2.1 legacy(稳定版)
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
npx aodw init
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
更新:
|
|
20
|
+
```bash
|
|
21
|
+
npx aodw update
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
卸载:
|
|
25
|
+
```bash
|
|
26
|
+
npx aodw uninstall
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### 2.2 next(新方案线)
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
npx aodw-skill init
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
更新:
|
|
36
|
+
```bash
|
|
37
|
+
npx aodw-skill update
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
卸载:
|
|
41
|
+
```bash
|
|
42
|
+
npx aodw-skill uninstall
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## 3. 安装路径与隔离
|
|
46
|
+
|
|
47
|
+
### 3.1 legacy 目录
|
|
48
|
+
|
|
49
|
+
- `.aodw/`
|
|
50
|
+
- 保持与现有 CLI 完全一致
|
|
51
|
+
|
|
52
|
+
### 3.2 next 目录
|
|
53
|
+
|
|
54
|
+
- `.aodw-next/`
|
|
55
|
+
- 不与 legacy 共享目录或文件
|
|
56
|
+
|
|
57
|
+
## 4. 适配器隔离原则
|
|
58
|
+
|
|
59
|
+
- legacy 继续写入原有适配器路径
|
|
60
|
+
- next 使用独立适配器路径(避免覆盖)
|
|
61
|
+
|
|
62
|
+
示例约定:
|
|
63
|
+
- legacy:`.aodw/` + `AODW_Adapters/`
|
|
64
|
+
- next:`.aodw-next/` + 独立命名文件(如 `aodw-next.mdc`)
|
|
65
|
+
|
|
66
|
+
适配器文件命名示例(next):
|
|
67
|
+
- Cursor:`.cursor/rules/aodw-next.mdc`
|
|
68
|
+
- Claude:`.claude/CLAUDE-NEXT.md`
|
|
69
|
+
- Antigravity/Gemini:`.agent/rules/aodw-next*.md`
|
|
70
|
+
- Gemini:`.gemini/GEMINI-NEXT.md`
|
|
71
|
+
|
|
72
|
+
## 5. 并行使用策略
|
|
73
|
+
|
|
74
|
+
1. legacy 线用于稳定生产项目
|
|
75
|
+
2. next 线用于试验与新用户
|
|
76
|
+
3. 两者升级互不影响
|
|
77
|
+
|
|
78
|
+
## 6. 兼容性说明
|
|
79
|
+
|
|
80
|
+
- 不强制依赖 Skills
|
|
81
|
+
- 保持多平台可用性(Cursor / Claude / Gemini 等)
|
|
82
|
+
|
|
83
|
+
## 7. 维护者打包说明
|
|
84
|
+
|
|
85
|
+
- 发布脚本会根据当前分支自动选择渠道:legacy / next
|
|
86
|
+
- `release/next` 或 `*-next*` 分支将发布 `aodw-skill`
|
|
87
|
+
- 其他分支默认发布 `aodw`
|
|
88
|
+
- next 渠道使用独立模板目录:`templates/.aodw-next`、`templates/AODW_Adapters_next`、`templates/docs-next`
|