Files
xuanzhi-wx/AGENTS.md

127 lines
9.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# AI 开发入口 [!IMPORTANT]
- **本文档要求**:本文档为当前仓库的项目级规范和重要导航,进入源码前必须先读。
- **本文档要求**:优先在现有目录职责内做增删改;若要新增一级目录、基础设施或工程约定,必须先更新本文档和对应文档。
- **本文档要求**:后续新增/删除 `.ai-specs` 文档时,必须同步更新 `## 项目文档`
- **文档要求**:规范型文档是给 AI 的顶层入口文档,要求短、硬、可判定,不写泛泛背景说明。
- **代码优化**:先复用再新增;允许抽公共逻辑,但边界必须清晰。
- **代码优化**:优化时必须同时考虑冗余、命名、复杂度、边界条件、兼容性和包体积,不能只追求功能跑通。不要擅自修改 UI/UX 视觉效果,除非需求明确。
- **代码默认遵循**:业务实现优先采用微信原生小程序主流做法,保持可维护、可调试、可发布。
- **代码默认遵循**:强制工作流:按 `## 项目文档` 定位需要的文档 -> 读取匹配文档 -> 进入源码。
## 工具使用规则
- **搜索范围限制**Grep/Glob 严禁全盘搜索,绝对禁止扫描 `node_modules``miniprogram_npm``coverage` 等生成或依赖目录。
- **读写**:所有文件读取/写入统一使用 UTF-8建议无 BOM
- **读写**PowerShell/脚本读取项目文件必须显式指定 `-Encoding utf8`
- **生成产物**:不要直接编辑微信开发者工具生成目录,例如 `miniprogram_npm`
- **画图**:优先使用 `mermaid flowchart`
- **对话/文档编写**:必须以中文为主体语言,技术术语保留英文原文。
- **命令执行**运行依赖、测试、格式化、CI 前,先读取 `package.json` 中已有 scripts不重复发明命令入口。
## 项目架构
- **技术栈**:本项目为 `微信原生小程序 + JavaScript + npm + TDesign`,运行时采用 `glass-easel` 组件框架;工程化使用 `ESLint``Prettier``Jest``miniprogram-ci`
- **代码链路**:本项目采用 `Page / Component -> services/api -> services/request -> RuntimeConfig / SessionStore -> Backend`
- **状态与配置**`config` 管理环境与常量,`stores` 管理跨页共享状态,`utils` 只放纯工具函数。
├── app.js / app.json / app.wxss (应用初始化、路由注册、全局样式)
├── pages (主包页面:首屏、登录、公共能力)
├── packages (分包页面,按业务域拆分)
├── components
│ ├── base (基础组件)
│ └── biz (业务组件)
├── services
│ ├── api (按业务模块封装接口)
│ └── request (统一请求、鉴权、重试、去重)
├── stores
│ └── modules (跨页共享状态)
├── config (环境配置、常量)
├── utils (纯工具函数)
├── tests (Jest 测试)
└── scripts/ci (小程序 CI 脚本)
| 层级 | 职责 | 命名规范 |
|:---|:---|:---|
| App | 初始化运行时配置、注册全局拦截与跳转、同步 `globalData` | 固定使用 `app.js``app.json``app.wxss` |
| Page | 承载页面数据、交互、路由跳转;不直接承载通用请求封装与跨页状态持久化 | 主包目录固定 `pages/<name>/index.*`;分包目录固定 `packages/<pkg>/pages/<name>/index.*` |
| Component | 承载可复用视图和局部交互,通过 `properties` / `events` 与页面通信 | 基础组件放 `components/base/<name>`;业务组件放 `components/biz/<name>` |
| API | 按业务封装接口方法,屏蔽 URL / Method / payload 细节;不直接持有页面 UI 状态 | 目录固定 `services/api/<module>.js`;聚合出口固定 `services/api/index.js` |
| Request | 统一处理 `baseURL`、header、token、超时、鉴权失效、重试和请求去重 | 目录固定 `services/request/index.js` |
| Store | 管理跨页共享和本地持久化状态;不与具体页面强耦合 | 模块固定 `stores/modules/<name>.js`;聚合出口固定 `stores/index.js` |
| Config | 管理环境、常量、timeout、storage key避免魔法值散落 | 目录固定 `config/*.js` |
| Utils | 存放纯函数;禁止依赖页面实例、组件实例或全局 UI 状态 | 目录固定 `utils/*.js` |
- 主包只放首屏、登录、Tab 和全局公共能力;新业务页面优先考虑放进对应分包。
- 页面和组件里不要直接调用 `wx.request`;统一走 `services/request`
- 跨页共享状态统一放 `stores`;页面局部状态留在 `Page` / `Component``data` 内。
- 环境切换、`baseURL``timeout` 统一走 `config/env.js``config/constants.js`
- 新增接口模块时,先补 `services/api/<module>.js`,再决定页面如何消费;不要把请求细节散落到页面。
### 架构关系
- 关系总线:`Page / Component -> API -> Request -> Env + SessionStore -> Backend`,其中 `app.js` 负责运行时初始化、登录态同步和未授权跳转。
```mermaid
flowchart LR
APP["app.js<br/>运行时初始化 / 未授权跳转"] --> SESSION["stores/modules/session.js<br/>登录态持久化"]
PAGE["Page / Component"] --> API["services/api/*.js"]
PAGE --> COMPONENT["components/base + components/biz"]
API --> REQUEST["services/request/index.js"]
REQUEST --> ENV["config/env.js"]
REQUEST --> SESSION
SESSION --> STORAGE["wx storage"]
REQUEST --> BACKEND["Backend API"]
```
-`app.json`:必须同步检查 `pages``subPackages``preloadRule`、实际目录路径和页面跳转路径是否一致。
-`pages/*``packages/*`:必须同步检查路由注册、导航目标、页面 JSON 中的组件注册、对应 API / Store 依赖。
-`components/base/*``components/biz/*`:必须同步检查 `index.js``index.json``index.wxml``index.wxss` 四件套,以及引用方的 `properties` / `events` 契约。
-`services/api/*`:必须同步检查 URL、Method、payload、response contract 和所有调用页的 loading / error / empty state。
-`services/request/index.js`:必须同步检查 `config/env.js``config/constants.js``stores/modules/session.js``app.js` 的未授权处理,以及所有 API 模块的调用预期。
-`stores/modules/session.js`:必须同步检查 storage key、`app.js` 中的 hydrate / subscribe、登录页和依赖权限的页面逻辑。
-`config/env.js``config/constants.js`必须同步检查请求层默认值、环境切换行为、CI 脚本和登录态相关逻辑。
- 新增/修改业务功能时,默认顺序是:先定页面归属与路由 -> 再定 API / Store 契约 -> 再落页面与组件 -> 最后回查 `app.json`、聚合导出和项目文档;禁止只改单点不回查上下游。
## 项目文档
- **当前已启用文档**:根目录 `README.md``.ai-specs/coding-specs/2026-04-22-profile-page-static-design.md`
- **预留扩展目录**`.ai-specs`(已创建;后续新增/删除文档必须在本节登记)
- **要求**:开始修改前,先按任务类型定位文档;有对应文档必须先读;未命中时按本文件通用规则和现有同层代码风格实现。
### root-docs
| 路径 | 用途 | 说明 |
|:---|:---|:---|
| `README.md` | 项目启动、目录、命令、CI、分包落点说明 | 涉及本地运行、构建 npm、测试、格式化、CI 上传、目录归属时必读 |
### .ai-specs 规划
| 分类 | 用途 | 说明 |
|:---|:---|:---|
| `coding-specs` | 存放页面分包、接口封装、状态管理、组件复用等实现规范 | 仓库复杂度上来后优先补齐 |
| `logic-specs` | 存放业务流程、页面信息架构、角色权限等业务说明 | 涉及多页面串联和复杂交互时补齐 |
| `sys-specs` | 存放环境、发布、CI、版本管理等系统级规则 | 涉及发布流程和工程治理时补齐 |
### .ai-specs 已启用文档
| 路径 | 用途 | 说明 |
|:---|:---|:---|
| `.ai-specs/coding-specs/2026-04-22-profile-page-static-design.md` | `pages/profile/index` 未登录态静态页面设计 | 涉及本页结构复刻、静态数据组织、样式边界与验收范围时必读 |
### 后端接口文档
D:\Code3\wdp\xuanzhi-service\.worktrees\feat-xuanzhi-service\server\.ai-specs\doc-dict 字典参考
D:\Code3\wdp\xuanzhi-service\.worktrees\feat-xuanzhi-service\server\.ai-specs\doc-api\admin 后端 api文档
## 可复用代码/组件
| 中文 | 代码文件名 | 说明 |
|:---|:---|:---|
| 统一请求封装 | `services/request/index.js` | 统一处理 `baseURL`、token 注入、鉴权失效、超时、重试和请求去重 |
| 用户接口模块 | `services/api/user.js` | 用户资料查询与更新的 API 封装示例 |
| Session Store | `stores/modules/session.js` | 登录态持久化、hydrate、订阅变更 |
| Store 聚合出口 | `stores/index.js` | 统一导出 store`app.js` 和页面引用 |
| App Button | `components/base/app-button` | 基础按钮组件,透出常用主题、尺寸和形态 |
| Entry Card | `components/biz/entry-card` | 首页 / 工作台入口卡片组件 |
| 运行时环境配置 | `config/env.js` | 根据微信环境选择 `baseURL``timeout` |