RuleStack

Configs

Stacks

Compare

Diff

RuleStack

Configs

Stacks

Compare

Diff

Read API

RuleStack

Configs

Stacks

Compare

Diff

Read API

Configs/AGENTS.md/QuantumNous/new-api

AGENTS.md

web/AGENTS.md
AGENTS.md

Quality

76/100

Scores the file, not the repository.

Length

728 words

23 headings · 0 code blocks

Repository

44k

— · pushed 0 days ago

Last changed

3 days ago

First indexed 3 days ago.
QuantumNous/new-api/web/AGENTS.mdRawGitHub
1# 前端开发规范
2 
3本文档定义前端项目的开发规范与最佳实践,供开发与 AI 助手共同遵循。具体依赖与脚本以 `package.json` 为准。
4 
5---
6 
7## 一、项目概览
8 
9### 技术栈
10 
11| 类别 | 技术 |
12| ---------- | ----------------------------------------------------------------- |
13| 包管理 | Bun |
14| 框架 | React 19、TypeScript |
15| 数据与请求 | @tanstack/react-query、axios、Zustand |
16| 路由 | @tanstack/react-router |
17| 表格与列表 | @tanstack/react-table、@tanstack/react-virtual |
18| 国际化 | i18next、react-i18next、i18next-browser-languagedetector |
19| 日期 | Day.js |
20| UI 与样式 | Base UI、Hugeicons、Tailwind CSS、clsx / class-variance-authority |
21| 表单 | React Hook Form、Zod |
22| 图表 | @visactor/vchart、@visactor/react-vchart |
23| 工具 | qrcode.react、oxfmt、oxlint、vitest(可选) |
24 
25优先选用成熟、维护良好的开源库;仅在现有库无法满足或需特殊适配时自行实现,并评估可维护性与通用性。
26 
27---
28 
29## 二、目录
30 
31- [一、项目概览](#一项目概览)
32- [二、目录](#二目录)
33- [三、开发规范](#三开发规范)
34 - [3.1 国际化](#31-国际化)
35 - [3.2 代码风格与类型](#32-代码风格与类型)
36 - [3.3 组件](#33-组件)
37 - [3.4 性能](#34-性能)
38 - [3.5 状态管理](#35-状态管理)
39 - [3.6 API 请求](#36-api-请求)
40 - [3.7 表单](#37-表单)
41 - [3.8 路由](#38-路由)
42 - [3.9 错误处理](#39-错误处理)
43 - [3.10 样式](#310-样式)
44 - [3.11 文件组织](#311-文件组织)
45 - [3.12 可访问性](#312-可访问性)
46 - [3.13 安全](#313-安全)
47 - [3.14 测试](#314-测试)
48 - [3.15 依赖管理](#315-依赖管理)
49 - [3.16 构建与部署](#316-构建与部署)
50- [四、协作与提交](#四协作与提交)
51- [更新日志](#更新日志)
52 
53---
54 
55## 三、开发规范
56 
57### 3.1 国际化
58 
59- **页面文本**:所有面向用户的文案均需支持 i18n,使用 `useTranslation()` 的 `t()` 进行翻译。
60- **使用场景**
61 - **React 组件**:必须使用 `const { t } = useTranslation()`,以保证语言切换时组件会重新渲染。
62 - **非 React 环境**(工具函数、常量、类方法):可使用 `import { t } from 'i18next'`;此类用法不会随语言切换自动更新,仅在不依赖响应式更新的场景使用。
63 - 即使父组件已使用 `useTranslation()`,子组件仍应自行使用,以保证独立性。
64- **专有名词**:品牌、产品、技术术语等可保留英文(如 API、React、TypeScript);若有约定俗成的译法则使用翻译。
65- **翻译键**:使用有层级、语义清晰的键名,如 `dashboard.overview.title`,并保持命名一致。
66 
67- **枚举与文案(常量中的 i18n)**
68 各 feature 的 `constants.ts` 中常出现「枚举/状态 + 展示文案」或「成功/错误消息」,须统一约定以免遗漏 i18n、用法混乱:
69 - **成功/错误/提示类消息**(如 `SUCCESS_MESSAGES`、`ERROR_MESSAGES`):常量值仅表示 **i18n 键**(与英文 fallback 同字面量)。展示时**必须**通过 `t()` 使用,例如 `toast.success(t(SUCCESS_MESSAGES.API_KEY_CREATED))`、`toast.error(t(ERROR_MESSAGES.UNEXPECTED))`,**禁止**直接 `toast.success(SUCCESS_MESSAGES.xxx)` 当作最终文案。
70 - **状态/选项的 label**:在常量中统一用 **labelKey**(字符串,即 i18n 键),组件中通过 `t(config.labelKey)` 渲染;或约定用 `label` 存与 en 一致的 key 字符串,组件用 `t(config.label)`。同一 feature 内只采用一种方式,避免混用。
71 - **新增此类常量时**:同步在 `src/i18n/static-keys.ts` 中登记对应 key(若项目用其做提取),或确保文案以 `t('...')` 字面量形式出现以便扫描,避免遗漏翻译。
72 
73### 3.2 代码风格与类型
74 
75- **表达式**:禁止 2 层及以上嵌套三元表达式;改用 `if-else`、提前返回或抽取函数。单层三元可保留,但需简洁。
76- **可读性**:控制函数圈复杂度,复杂逻辑拆成小函数;变量与函数命名需有意义,遵循驼峰等常规约定。
77- **TypeScript**:避免 `any`,优先具体类型或 `unknown`;为参数与返回值显式标注类型;仅类型用途的导入使用 `import type { X } from '...'`。
78- **类型检查**:每次改动 TypeScript 或 TSX 代码后都要执行类型检查(如 `bun run typecheck`);若出现类型错误,须修复至无错误为止,不得遗留。
79- **Lint 检查**:每次完成代码改动前,必须对所涉及文件执行 lint 检查,并修复这些文件中的所有 lint error;不得遗留 error。warning 可按变更范围与风险评估处理。
80- **解构**:对象非必要不要进行解构,特别是组件的 props;直接使用 `props.xxx` 更清晰,避免不必要的解构增加代码复杂度。
81 
82### 3.3 组件
83 
84- 使用函数式组件与 Hooks,单一职责;组件 props 须有明确类型(接口或类型别名)。
85- **Props 使用**:组件 props 非必要不要解构,直接使用 `props.xxx` 访问属性,保持代码清晰(详见 [3.2 代码风格与类型](#32-代码风格与类型))。
86- 单文件超过约 200 行时考虑拆分子组件或将逻辑抽到自定义 Hooks;类型定义可与组件同文件或放在同模块的 `types` 中。
87 
88### 3.4 性能
89 
90- **React**:合理使用 `useMemo`、`useCallback` 减少无效重渲染;避免在渲染路径中创建新对象/数组;必要时使用 `React.memo`。
91- **代码分割**:使用 `React.lazy` 与动态 `import` 做按需加载,控制首屏与路由体积。
92- **资源**:图片选用合适格式与尺寸,大列表考虑虚拟滚动(如 @tanstack/react-virtual),大量图片考虑懒加载。
93 
94### 3.5 状态管理
95 
96- 使用 Zustand 的 `create` 定义 store,并为 state 与 actions 定义清晰类型。
97- 组件内优先用选择器订阅,避免整 store 订阅导致多余渲染,例如:`const user = useAuthStore((s) => s.auth.user)`。
98- 需持久化的状态在 store 内读写 localStorage,并在初始化时恢复。
99- Store 按功能放在 `src/stores/`,单文件职责清晰,命名表意明确。
100 
101### 3.6 API 请求
102 
103- **React Query**:数据获取用 `useQuery`,变更用 `useMutation`;为每个查询配置唯一 `queryKey`(建议数组形式、层级一致);在 `onSuccess` 中对相关 query 做 `invalidateQueries`,可配合乐观更新。服务端错误统一通过 `handleServerError` 处理(详见 [3.9 错误处理](#39-错误处理))。
104- **Axios**:使用项目统一的 `api` 实例(含 `baseURL`、`headers`、`withCredentials: true`);GET 默认请求去重,特殊请求可通过配置关闭;认证与通用错误在拦截器中处理。
105 
106### 3.7 表单
107 
108- 使用 React Hook Form + Zod:在功能模块的 `lib/` 下定义 schema,并用 `z.infer` 导出表单类型;`useForm` 配合 `@hookform/resolvers/zod` 做校验。
109- 提交逻辑放在 `onSubmit`,展示加载与错误状态;成功后视场景重置表单或关闭弹窗。服务端校验错误映射到对应字段并展示(字段级错误展示方式见 [3.9 错误处理](#39-错误处理))。
110 
111### 3.8 路由
112 
113- 使用 TanStack Router,路由文件位于 `src/routes/`,通过 `createFileRoute` 定义;搜索参数用 Zod schema + `validateSearch` 校验。
114- 在 `beforeLoad` 中做认证与重定向,避免不必要的请求;嵌套结构用布局路由与 `_authenticated` 等前缀,子路由通过 `<Outlet />` 渲染。
115- 导航使用 `useNavigate` 或 `Link`,保持类型安全,避免直接操作 `window.location`。
116 
117### 3.9 错误处理
118 
119- **服务端错误**:统一使用 `handleServerError`,在 React Query 全局配置与拦截器中接入;按 HTTP 状态码给出合适提示,文案使用 i18n。
120- **展示**:使用 `toast.error` 等统一方式;路由级错误由 `errorComponent` 承接,提供友好错误页并记录便于排查的信息。
121- **表单**:校验与服务端错误映射到字段后,在字段下方展示;使用 `form.setError` 等与表单库一致的方式。
122 
123### 3.10 样式
124 
125- 以 Tailwind 工具类为主,动态类名用 `cn()` 合并;非动态场景避免内联样式。
126- 响应式采用移动优先与 Tailwind 断点(`sm:`、`md:`、`lg:` 等);主题与暗色用 CSS 变量与 `dark:`,自定义样式集中在 `src/styles/`,组件内尽量少写自定义 CSS。
127 
128### 3.11 文件组织
129 
130- **功能模块**:置于 `src/features/<feature>/`,内含 `components/`、`lib/`、`hooks/`,以及按需的 `api.ts`、`types.ts`、`constants.ts`、入口组件等。
131- **通用**:通用组件放 `src/components/`,通用工具与类型放 `src/lib/`;组件文件 PascalCase,工具/类型文件 kebab-case 或 `types.ts`,类型使用 PascalCase 命名并 `export type`。
132 
133### 3.12 可访问性
134 
135- 使用语义化 HTML(如 `header`、`nav`、`main`、`footer`),表单用 `label` 关联输入。
136- 保证键盘可操作与焦点顺序合理;必要时使用 ARIA(如 `aria-label`、`aria-expanded`、`aria-hidden`);装饰性图标加 `aria-hidden="true"`,重要信息提供文本等价。
137- 对比度满足 WCAG 2.1 AA(正文至少 4.5:1)。
138 
139### 3.13 安全
140 
141- 认证与权限在路由与接口层校验;敏感操作增加二次确认等。
142- 前后端均做数据校验(如 Zod),不信任仅前端校验;敏感信息不落前端存储,配置用环境变量,禁止硬编码密钥。
143- 依赖 React 默认转义,慎用 `dangerouslySetInnerHTML`;跨域与 Cookie 使用 `withCredentials` 并按后端要求处理 CSRF。
144 
145### 3.14 测试
146 
147- 工具函数与纯逻辑优先单元测试(Vitest),测试文件 `*.test.ts`;组件用 React Testing Library 测交互与行为,避免测实现细节。
148- 新增功能、修复缺陷或修改现有行为时,必须同步新增或更新测试;Bug 修复必须先编写能够稳定复现问题的失败用例,再实现修复并确认用例转为通过。
149- 修改前端组件的布局、尺寸、滚动定位、焦点管理、键盘操作、选中状态、禁用状态、加载状态、空状态、错误状态或响应式行为时,必须补充对应的回归测试,覆盖本次变更保护的用户可见行为,防止后续调整重新引入问题。
150- 功能模块或组件模块的测试必须放在该模块专属的 `__tests__/` 目录中,例如 `src/components/model-group-selector/__tests__/layout.test.ts`;禁止将新增测试文件与正式代码文件平铺在同一目录。
151- 测试文件按被测职责命名,例如 `layout.test.ts`、`selection.test.ts`、`validation.test.ts`;一个测试文件只覆盖一个明确模块或职责,避免形成跨模块的超大测试文件。
152- 每个测试用例应只保护一个可描述的行为,名称必须包含触发条件和预期结果;优先使用 Arrange、Act、Assert 的清晰结构,避免在单个用例中混合多个无关断言。
153- 测试必须覆盖主要成功路径以及本次变更涉及的关键边界和失败路径,包括空数据、单项和多项数据、超长文本、无效输入、禁用状态、异步失败与降级逻辑;不得为了数量机械枚举不相关输入。
154- 布局测试应断言明确且稳定的行为契约,例如固定尺寸、排列方向、溢出策略、滚动目标和降级路径;不要仅断言组件能够渲染,也不要依赖浏览器像素误差、浏览器私有实现或脆弱的完整 class 字符串快照。
155- 组件交互测试应从用户视角查询元素并执行点击、输入、键盘和焦点操作,断言可见结果、可访问状态或对外回调;禁止直接断言组件内部 state、私有函数调用次数或无用户意义的 DOM 层级。
156- 涉及可访问性的组件必须覆盖可访问名称、键盘可操作性,以及 `aria-expanded`、`aria-selected`、`aria-disabled`、`aria-invalid` 等与视觉状态一致的属性。
157- 涉及 i18n 文案的测试优先通过稳定的角色、label 或翻译键语义定位元素,避免将某一种语言的完整展示文案作为与业务无关的脆弱断言;若翻译内容本身是契约,则应明确覆盖语言切换或 fallback 行为。
158- 异步测试必须等待明确的界面状态或 Promise 结果,不得使用固定 `sleep`、依赖执行耗时或制造竞态;定时器、网络请求和浏览器 API 仅在必要边界进行可控 mock,并在每个用例后恢复。
159- 优先测试真实代码路径;只有外部网络、时间、随机数、存储或浏览器 API 等不可控边界可以 mock。禁止 mock 被测模块自身,也不要通过复制生产逻辑到测试中计算期望结果。
160- 测试数据应使用最小且具有业务含义的显式 fixture,测试内部必须独立初始化并清理全局状态、缓存、localStorage、mock 和定时器,确保用例可单独运行且不依赖执行顺序。
161- 快照测试仅适用于稳定且人工可审查的结构输出;交互组件、复杂 DOM 和 Tailwind class 列表不得使用大范围快照代替行为断言。
162- 关键流程补充集成与 E2E(如 MSW 模拟 API、Playwright/Cypress);核心功能目标覆盖率 80% 以上,关注业务路径与关键分支。
163- 测试必须保护真实用户行为、稳定 API 契约或明确回归路径;禁止为了覆盖率添加 smoke、sleep/timing、随机输入、日志输出或只证明代码运行的测试。
164- 新增或大幅重写测试时优先使用 Vitest 与 React Testing Library 的标准断言和查询方式,避免手写通用断言辅助函数;只有表达项目特定业务不变量时才抽取测试 helper。
165- 清理测试时先合并重复场景、删除不明不白的实现细节断言;若旧测试间接覆盖了真实契约,需替换为更小、更直接的行为测试。
166- 提交前必须至少运行受影响测试文件,并根据影响范围执行相关测试集、`bun run typecheck` 和涉及文件的 lint;不得在未看到最新通过结果的情况下声明测试完成。
167 
168### 3.15 依赖管理
169 
170- 使用 **Bun**:`bun install`、`bun add <pkg>`、`bun add -d <pkg>`、`bun remove <pkg>`、`bun pm ls`、`bun update` 等。
171- 新增依赖前评估维护情况、体积与许可;生产与开发依赖区分清楚,版本用 `^`/`~` 控制,定期更新以获取安全修复。
172 
173### 3.16 构建与部署
174 
175- 使用 Rsbuild,配置见 `rsbuild.config.ts`;脚本以 `package.json` 为准(如 `bun run dev`、`bun run build`、`bun run typecheck`、`bun run lint`、`bun run format`),包管理见 [3.15 依赖管理](#315-依赖管理)。
176- 代码分割与懒加载策略见 [3.4 性能](#34-性能);资源使用合适格式与压缩,环境变量用 `.env` 且以 `VITE_` 前缀,不在代码中硬编码。
177- **发布前**:执行 typecheck、lint、format 检查,完成生产构建并检查产物体积与环境变量配置。
178 
179---
180 
181## 四、协作与提交
182 
183- 提交信息清晰、符合项目约定,描述变更内容与原因,中英文统一即可。
184- 变更需经过代码审查,符合本文档规范,并关注质量、性能与安全。
185- 重大功能或规范变更时更新相关文档与 `AGENTS.md`。
186 
187---
188 
189## 更新日志
190 
191- **2026-01-28**:初始版本(国际化、代码、组件、类型等基础规范)。
192- **2026-01-28**:补充状态管理、API、表单、路由、错误处理、样式、文件组织、可访问性、安全、测试、依赖与构建部署规范。
193- **2026-01-29**:重组文档结构,合并重复内容,明确主次与交叉引用。
194- **2026-01-31**:在 3.2 中补充「类型检查」要求:改动 TS/TSX 后须执行 typecheck 并修复至无错。
195- **2026-06-21**:在 3.2 中补充「Lint 检查」要求:完成代码改动前须修复所涉及文件的所有 lint error。
196 

Commands it names

  • bun run typecheck
  • bun install
  • bun add <pkg>
  • bun add -d <pkg>
  • bun remove <pkg>
  • bun pm ls
  • bun update
  • bun run dev
  • bun run build
  • bun run lint
  • bun run format

Sections

  • 前端开发规范
  • 一、项目概览
  • 技术栈
  • 二、目录
  • 三、开发规范
  • 3.1 国际化
  • 3.2 代码风格与类型
  • 3.3 组件
  • 3.4 性能
  • 3.5 状态管理
  • 3.6 API 请求
  • 3.7 表单
  • 3.8 路由
  • 3.9 错误处理
  • 3.10 样式
  • 3.11 文件组织
  • 3.12 可访问性
  • 3.13 安全
  • 3.14 测试
  • 3.15 依赖管理
  • 3.16 构建与部署
  • 四、协作与提交
  • 更新日志

What it covers

setupbuildtesttesting-strategyapiui

Stack — with the evidence

typescript

(1.00)

go

(1.00)

docker

(1.00)

bun

(0.85)

node

(0.70)

react

(0.70)

tailwind

(0.70)

desktop-app

(0.70)

javascript

(0.60)

github-actions

(0.60)

Format

AGENTS.md

A plain-markdown README for coding agents, deliberately unopinionated: no frontmatter, no globs, no vendor keys. That minimalism is why it became the one file a dozen different agents will read, and why it carries the least per-file targeting power of any format here.

What the corpus says about it

Repository

Owner
QuantumNous
Language
—
License
—
Archived
no

All configs in this repo

Also in QuantumNous/new-api

Diff this repo’s formats

One repository carrying more than one format is the comparison this product exists for: does anyone actually write different content in each file, or is one a copy of the other?

The other instruction files in this repository
RepositoryFormatStackCoversScoreChanged
QuantumNous/new-apiAGENTS.md · 44kAGENTS.mdgodocker+7setupbuildstylearch+493/1003 days ago
Diff against AGENTS.md

Similar configs

Same format, overlapping stack, ranked by quality.

Same format, overlapping stack, ranked by quality
RepositoryFormatStackCoversScoreChanged
TryGhost/Ghoste2e/AGENTS.md · 55kAGENTS.mdtypescriptjavascript+12setupteststylearch+2100/1003 days ago
aaif-goose/gooseAGENTS.md · 52kAGENTS.mdrusttypescript+2setupbuildtestlint-format+6100/1003 days ago
duckduckgo/content-scope-scriptsspecial-pages/AGENTS.md · 70AGENTS.mdtypescriptjavascript+5buildteststylearch+3100/1003 days ago
n8n-io/n8npackages/@n8n/agents/AGENTS.md · 199kAGENTS.mdtypescriptlangchain+16buildteststylearch+3100/1003 days ago
mui/material-uiAGENTS.md · 99kAGENTS.mdtypescriptjavascript+13setupbuildtestlint-format+9100/1003 days ago
wpscanteam/wpscanAGENTS.md · 9.7kAGENTS.mdrubyvue+3setupbuildteststyle+6100/1002 days ago
trick77/agents-md-syncAGENTS.md · 2AGENTS.mdtypescriptnode+4setupbuildteststyle+5100/1003 days ago
code-yeongyu/oh-my-openagentpackages/web/AGENTS.md · 67kAGENTS.mdtypescriptbun+10setupbuildtestlint-format+6100/1002 days ago
RuleStack

Built by

Kynth Studio

Directory

Configs
Stacks
Compare formats
Diff two configs
Best AGENTS.md examples

Formats

AGENTS.md
CLAUDE.md
Cursor rules
Copilot instructions

Reference

Read API
Corpus health
Privacy Policy
Terms

RuleStack

RuleStack

Built by

Kynth Studio

Directory

Configs
Stacks
Compare formats
Diff two configs
Best AGENTS.md examples

Formats

AGENTS.md
CLAUDE.md
Cursor rules
Copilot instructions

Reference

Read API
Corpus health
Privacy Policy
Terms

RuleStack

RuleStack

Built by

Kynth Studio

Directory

Configs
Stacks
Compare formats
Diff two configs
Best AGENTS.md examples

Formats

AGENTS.md
CLAUDE.md
Cursor rules
Copilot instructions

Reference

Read API
Corpus health
Privacy Policy
Terms

RuleStack